Entrada:
um conjunto de matrizes (de números).
Os elementos em cada matriz estão em ordem classificada, mas o conjunto de matrizes não é necessariamente classificado. As matrizes não são necessariamente do mesmo tamanho. O número total de elementos é.
Saída: Oo menor elemento dentre todos os elementos da entrada.
Qual é o algoritmo mais eficiente para esse problema?
É possível, por exemplo, obter um tempo de execução de ?
Respostas:
Você pode fazer isso emO(l+k log l) tempo e O(l) espaço extra da seguinte maneira:
Se você substituir a pilha binária por uma pilha de Fibonacci, acho que isso fará com que você seja amortizadoO(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 menosk elementos para encontrar o k o 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) .
fonte
Aqui está um randomizadoO ( ℓregistro2n ) algoritmo. Provavelmente, pode ser des randomizado usando o mesmo truque usado para des randomizar a seleção rápida usual.
Emulamos o algoritmo clássico de seleção rápida. Em cada fase, você escolhe um pivô e calcula quantos elementos estão abaixo dele, emO ( ℓ logn ) , usando a pesquisa binária em cada lista. Então você remove os elementos do lado errado e repete. O processo termina apósregistron iterações na expectativa.
fonte
Isso parece ter sido resolvido pelo artigo Seleção e classificação generalizada (Versão Preliminar) de Frederickson e Johnson no STOC '80.
Eles fornecem limites superior e inferior de:Θ(ℓ+∑ℓi=1log|Ai|) que acaba por ser ℓlogn para a maioria das distribuições de tamanho de matriz.
O algoritmo real para atingir o limite superior é aparentemente apresentado em um artigo anterior: algoritmos ótimos para gerar informações quantílicas em X + Y e matrizes com colunas classificadas , Proc. 13ª Conferência Anual sobre Ciência da Informação e Sistemas, Universidade Johns Hopkins (1979) 47-52.
fonte
Aℓ mesclagem leva tempo Θ(nlogℓ) (use uma maneira eficiente de representar uma fila de prioridade dos elementos principais em cada lista) e escolha a opção k -ésimo elemento em tempo constante. Acho que isso é discutido em "Classificação e pesquisa" de Knuth para classificação. Obter o menor (ou maior) leva claramenteΘ(ℓ) , para uma matriz não classificada, é O(n) IIRC.
Por favor, descreva seu algoritmo.
fonte