Supposons que l'on nous donne un tableau contenant des entiers non négatifs (pas nécessairement distincts).
Soit un trié dans l'ordre non croissant. Nous voulons calculer A m = max i ∈ [ n ] B [ i ] + i .
La solution évidente consiste à trier puis à calculer . Cela donne un algorithme qui s'exécute dans le temps dans le pire des cas.
Est-il possible de faire mieux? Peut-on calculer en temps linéaire?
Ma principale question est celle ci-dessus. Mais il serait intéressant de connaître la généralisation suivante du problème.
Soit un trié selon une comparaison oracle et une fonction donnée par un oracle. Étant donné et les oracles pour et , que pouvons-nous dire du temps nécessaire pour calculer ?
On peut encore calculer en temps . Mais peut-on prouver une borne inférieure super-linéaire pour ce cas généralisé?
Si la réponse est oui, la borne inférieure est-elle valable si nous supposons que est l'ordre habituel sur les entiers et est une fonction "agréable" (monotone, polynomiale, linéaire, etc.)?f
Si le tableau est composé d'entiers distincts, alors , car la distance entre les entrées adjacentes dans est d'au moins ; la situation est plus intéressante lorsqu'elles n'ont pas besoin d'être distinctes.UNE m = max ( A ) + 1 B 1
Pour votre question plus générale, imaginez une situation dans laquelle n'est "intéressant" que lorsque . Il semble possible de construire un argument adversaire qui vous oblige à interroger pour tout avant de pouvoir connaître , donc vous devez trier afin de trouver la réponse, qui prend des comparaisons . (Il y a quelques complications car il se peut que nous puissions tester si en temps constant plutôt que linéaire en interrogeant .) C'est le cas même si est un polynôme (de haut degré).i = j f ( B [ i ] , i ) i max i f ( B [ i ] , i ) A Ω ( n log n ) A [ i ] = B [ j ] fF( B [ i ] , j ) i = j F( B [ i ] , i ) je maxjeF( B [ i ] , i ) UNE Ω ( n logn ) A [ i ] = B [ j ] F( A [ i ] , j ) F
la source