Suponha que recebamos uma matriz contendo números inteiros não negativos (não necessariamente distintos).
Deixe ser ordenado na ordem não crescente. Queremos calcular
A solução óbvia é classificar e depois calcular . Isso fornece um algoritmo que é executado no tempo no pior dos casos.
É possível fazer melhor? Podemos calcular em tempo linear?
Minha principal pergunta é a acima. Mas seria interessante saber sobre a seguinte generalização do problema.
Deixe ser classificados de acordo com alguma comparação do Oracle e uma função dada por um Oracle. Dada e oráculos para e , o que podemos dizer sobre o tempo necessário para calcular ?
Ainda podemos calcular no tempo . Mas podemos provar um limite inferior super-linear para este caso generalizado?
Se a resposta for sim, o limite inferior se mantém se assumirmos que é a ordem usual em números inteiros é uma função "agradável" (monótona, polinomial, linear etc.)?
Se a matriz consistir em números inteiros distintos, então , já que a distância entre as entradas adjacentes em é pelo menos ; a situação é mais interessante quando eles não precisam ser distintos.A m=max(A)+1 B 1
Para sua pergunta mais geral, imagine uma situação em que seja apenas "interessante" quando . Parece possível construir um argumento adversário que obriga a consultar para todos os antes que você possa conhecer , portanto, você precisa classificar para encontre a resposta, que faz comparações . (Existem algumas complicações, pois pode ser o caso de podermos testar se em tempo constante, e não linear, consultando .) Esse é o caso, mesmo que é um polinômio (de alto grau).f(B[i],j) i=j f(B[i],i) i maxif(B[i],i) A Ω(nlogn) A[i]=B[j] f(A[i],j) f
fonte