Você pode fazer isso em O(l+k log l) tempo e O(l) espaço extra da seguinte maneira:
- Crie uma pilha binária com uma entrada para cada uma das matrizes. A chave para entradai é o menor elemento da matriz Ai. Isso levaO(l) Tempo.
- Selecione a menor entrada da pilha e remova-a O(log l) Tempo). Adicione essa entrada de volta ao heap usando a próxima menor entrada na matriz relevante como chave (novamenteO(log l) Tempo).
- Faça o passo anterior kvezes. O último elemento que você remove da pilha é sua resposta.
Se você substituir a pilha binária por uma pilha de Fibonacci, acho que isso fará com que você seja amortizado O(l+k) tempo, mas, na prática, será mais lento que o monte binário, a menos que l é enorme.
Eu suspeito que o limite de heap de Fibonacci seja ideal, porque intuitivamente você precisará inspecionar pelo menos k elementos para encontrar o ko menor, e você terá que inspecionar pelo menos um elemento de cada um dos l matrizes, já que você não sabe como elas são classificadas, o que imediatamente fornece um limite inferior de Ω(max(k,l))=Ω(k+l).