Tri avec une moyenne de

10

Existe-t-il un algorithme de tri basé sur la comparaison qui utilise une moyenne de lg(n!)+o(n) comparaisons?

L'existence d'un algorithme de comparaison pire des cas lg(n!)+o(n)est un problème ouvert, mais le cas moyen suffit pour un algorithme randomisé avec des comparaisons attendues lg(n!)+o(n)pour chaque entrée . La signification de lg(n!)+o(n) est qu'il s'agit de comparaisons o(n) rapport à l'optimum, ce qui fait perdre en moyenne seulement o(1) comparaisons par élément.

Comme j'ai déjà un tel algorithme, je l'inclus comme réponse (en utilisant le format Q / A ), mais je me réjouis des réponses supplémentaires, y compris d'autres algorithmes, si un tel algorithme était déjà connu, améliorant o(n) , et pire- cas lg(n!)+o(n) .

Travaux antérieurs: le
tri par fusion utilise les comparaisons (même dans le pire des cas). Le tri par fusion-insertion (également connu sous le nom de tri de Ford-Johnson) utilise également des comparaisons mais avec une constante beaucoup plus petite en . Complexité moyenne améliorée pour le tri basé sur la comparaison (par Kazuo Iwama et Junichi Teruyama) - leur (1,2) algorithme d'insertion ressemble à une partie de ma réponse ci-dessous.l g ( n ! ) + Θ ( n ) Θ ( n )lg(n!)+Θ(n)
lg(n!)+Θ(n)Θ(n)

Dmytro Taranovsky
la source
Cette question chevauche le tri par comparaison aléatoire optimale , mais étant donné l'importance différente (comportement asymptotique spécifique ici - par rapport à l'état général des connaissances, toutes les tailles d'entrée et différence par rapport au pire des cas là-bas), j'ai décidé d'utiliser une nouvelle question.
Dmytro Taranovsky

Réponses:

4

Mise à jour: j'ai développé cette réponse dans un trilg(n!)+o(n) papier avec une moyenne de l g ( n ! ) + O ( n ) comparaisons .

Oui, un tel algorithme existe. Je prouverai seulement la limite lg(n!)+o(n) , mais sous une hypothèse de randomisation probable, nous obtenons également lg(n!)+O(n1ε) . Je décrirai également une tentative pour n0.5+o(1) et O(n0.5ε) .

On peut supposer que tous les éléments sont distincts, en les annotant si nécessaire; le cas moyen utilise des éléments distincts dans un ordre aléatoire. Nous pouvons calculer le nombre moyen de comparaisons en ajoutant la perte d'entropie pour chaque comparaison par rapport à l'utilisation d'une pièce équitable.

Le point de départ est une sorte d'insertion avec une recherche binaire pour décider où insérer l'élément suivant dans le sous - ensemble Sorted . Lorsque ( 1 - ε ) 2 m| S | 2 m - 1 , une insertion utilise au plus m comparaisons, qui (en termes d'entropie) est optimale jusqu'à un facteur additif O ( ε ) (et pour la complexité moyenne, 2 m| S |( 1 + ε ) 2 mS(1ε)2m|S|2m1mO(ε)2m|S|(1+ε)2mfonctionne également). Maintenant, quand n'est pas proche d'une puissance de 2, l'insertion d'un élément A est sous-optimale (même dans le cas moyen et quelle que soit la façon dont nous équilibrons chaque requête), mais en gaspillant les comparaisons de o ( 1 ) , nous pourrions orienter A vers une distribution approximativement uniforme sur un intervalle de S de longueur proche d'une puissance de 2, on obtient l'optimalité souhaitée.|S|Ao(1)AS

Nous y parvenons en ajoutant des éléments en lots, et parfois en comparant efficacement les éléments du lot entre eux, de sorte que l'intervalle de correspondant à un élément A diminue de manière quasi aléatoire (et avec la distribution de probabilité de A à l'intérieur de l'intervalle à peu près uniforme), et lorsque la longueur de l' intervalle est suffisamment proche d'une puissance de 2, en faisant la recherche binaire pour insérer a .SAAA

Constructions communes

Nous garderons un sous-ensemble d'éléments triés, et pour chaque élément A non trié , nous garderons la trace de l'intervalle minimal I A de SA est connu pour être localisé. | I A | est la longueur de I A ; I A = I B est par l'identité des intervalles.SAIASA|IA|IAIA=IB

Soit : Comparez A avec B , puis (dans un ordre aléatoire) comparez A et B avec les éléments correspondants de S jusqu'à ce que leurs intervalles soient disjoints (ou aient une longueur 1). L'élément de S est choisi (de manière cohérente) pour rendre les probabilités de comparaison aussi proches que 1/2 que possible, en supposant que lorsque C o m p a r e est appelé, ( A , B )Compare(A,B)ABABSSCompare(A,B)est uniformément distribué sur . En raison de la disjonction à la fin, C o m p a r e préserve l'hypothèse d'uniformité.IAIBCompare

Les sections suivantes peuvent être lues indépendamment les unes des autres.

A algorithmelg(n!)+o(n)

Éléments fournis : une liste triée et un lot de m éléments non triés; m ω ( 1 ) o ( | S | ) ; les éléments non triés sont aléatoires par rapport à S .Smmω(1)o(|S|)S

Répétez (1) - (3) autant que possible:
1. Choisissez deux éléments et B du lot avec I A = I B (tout choix fonctionnera). 2. Exécutez C o m p a r e ( A , B ) . 3. Si | I A | est assez proche d'une puissance de 2, (note 1) retirer A du lot (sans oublier I A ); et faire de même avec B . Enfin: insérez tous les éléments dansABIA=IB
Compare(A,B)
|IA|AIAB
et complétez le tri.S

Note 1: Pour "assez proche", toute erreur relative (en fonction de m ) fonctionne tant que les éléments m - o ( m ) seront supprimés à l'étape (4) (possible par la note 2). Sous une hypothèse de randomisation conjecturée, en utilisant c log log m / log m l'erreur relative capture m ( 1 - log - Θ ( c ) m ) éléments, permettant a l g ( n ! )o(1)mmo(m)cloglogm/logmm(1logΘ(c)m) algorithme de tri de comparaison moyenne.lg(n!)+O(nloglogn/logn)

Remarque 2: Étant donné que la même séquence de comparaisons conduit au même intervalle de délimitation, presque tous les éléments passeront par l'étape (1) fois (sauf s'ils sont supprimés à l'étape 4). Au début, si A < B et on prend A , on compare A à l'élément S [ ( 1 - 1 / Ω(logm)A<BAA, et chaque application de l'étape (3) àAa uneprobabilité de réduction deO(1)| IA| en1/(1-1/S[(11/2)|S|]AO(1)|IA|fois. Maintenant, pour chaque rapporta>1qui n'est pas une puissance rationnelle de 2, nous avonsε>0d>0m,nN1/(11/2)a>1, et donc nous obtenons laborneo(n).ε>0d>0m,nN1ε<amd2n<1+εo(n)

Un algorithme probable lg(n!)+O(n1ε)

Modulo une hypothèse de randomisation, nous pouvons obtenir des comparaisons moyennes comme suit.lg(n!)+O(n1ε)

  • Mélangez au hasard les éléments et triez la première moitié dans une liste , tout en conservant la seconde moitié en tant que lot non trié.S

  • Répétez jusqu'à ce que le lot soit vide:
    choisissez au hasard . Soit G = { B batch : | P ( A < B ) - 0,5 | < n - 0,51 ε } . Si G est vide, retirez A du lot et l' insérer dans S . Autrement:AbatchG={Bbatch:|P(A<B)0.5|<n0.51ε}GAS

    1. S'il y a tel qu'avec la probabilité Θ ( 1 ) (disons ≥0,05), C o m p a r e ( A , B ) fait | I A | dans n - ε erreur relative d'une puissance de 2, exécuter C o m p a r e ( A , B ) et en cas de succès (ie | I A | est dans nBGΘ(1)Compare(A,B)|IA|nεCompare(A,B)|IA| l' erreur relative d'une puissance de 2), retirerApartir du lot etinsérer dansS.nεAS
    2. S'il n'y a pas de , exécutez C o m p a r e ( A , B ) pour un B G aléatoire .BGCompare(A,B)BG

Si notre hypothèse de randomisation fonctionne (c'est-à-dire que la distribution des longueurs et des positions d'intervalles est suffisamment aléatoire), alors tout au long du processus, un typique peut être efficacement comparé à un choix de n Θ ( 1 ) éléments (avec n Θ ( 1 ) différentes longueurs d'intervalle). Ainsi, nous pouvons généralement choisir une comparaison pour (1) ci - dessus, et si nous sommes malchanceux avec le résultat de la comparaison, nous obtenons toujours Θ ( log n ) chances, réalisant ainsi (si ε est assez petit, disons 0,01) a l g ( n ! ) +AnΘ(1)nΘ(1)Θ(logn)εAlgorithme de comparaison O ( n 1 - ε ) . Avec quelques modifications et approximations, le calcul total peut être rendu quasi linéaire: étant donné un élément A , calculez des longueurs d'intervalle prometteuses, puis recherchez B s avec le centre approximatif et les longueurs d'intervalle appropriés.lg(n!)+O(n1ε)AB

Il existe un certain nombre de façons d'optimiser les comparaisons, mais l'obstacle est que chaque comparaison peut finir par être malchanceuse et nous avons un nombre limité de comparaisons. Si après optimisation, fait une moyenne de 4 comparaisons et 'réussit' avec 1/4 probabilité, on obtient ε( 1 - ε ) / 4 / enregistrons 4 / 3 2 0,09 .Compare(A,B)ε(1ε)/4/log4/320.09

Une approche peut-être bien meilleure consiste à attendre qu'un intervalle soit proche d'une puissance de 2, en contrôlant non pas les longueurs d'intervalle individuelles mais les distributions de longueurs.

Une tentative d' algorithme lg(n!)+n0.5+o(1)

Supposons que et on nous donne un lot non trié de n éléments avec les intervalles I A également donnés, avec | I A | typiquement n 1 - o ( 1 ) et avec | I A ||S|=nnIA|IA|n1o(1) distribué uniformément (jusqu'à une erreur aléatoire, et tenant avec une précision suffisante même s'il est conditionné surA<S[i]). Ensuite, nous pouvons trier les éléments perdant une moyenne den0,5+o(1)comparaisons comme suit: (*) Insérer tous les éléments dans l'ordre de leur initial| IA||IA|2lg|IA|A<S[i]n0.5+o(1)
. De cette façon, tous les éléments sont insérés lorsque leur longueur d'intervalle est proche d'une puissance de 2.|IA|2lg|IA|

L'algorithme de tri sera: lecture aléatoire de la liste et au hasard sorte la première moitié . Pour insérer la seconde moitié, faites la bonne distribution et faites le (*) ci-dessus.S

Pour faire le droit de distribution, nous pouvons faire une distribution «aléatoire», puis retenir la bonne fraction des éléments pour chaque| IA| /2lg| IA| en randomisant le reste (en répétant si nécessaire). Cependant, alors que cela devrait corriger| IA||IA|2lg|IA||IA|/2lg|IA| globalement, nous ne savons pas s'il peut être contrôlé localement avec la précision requise (d'où le mot "tentative" ci-dessus).|IA|2lg|IA|

Pour faire une distribution «aléatoire», nous pouvons utiliser au hasard avec P ( A < B ) 0,5 , sauf qu'avec le I A initial tous identiques, nous ne nous attendons pas à une randomisation à une profondeur sublogarithmique (ie avec I A assez longtemps). Cependant, je suppose que nous obtenons la randomisation à une profondeur sublogarithmique en utilisant des généralisations (probablement tout choix raisonnable fonctionnera) de C o m p a r e toCompare(A,B)P(A<B)0.5IAIACompare éléments: Si nous gardons k = ω ( 1 ) enchevêtrements (ie connectésutilisantrésultats decomparaison), nous devrions avoirsujet de k choix pour chaque comparaison commutent pas avec S . Cela devrait permettre laprofondeur de randomisation O ( log k n + log k ) , comme souhaité (en supposant que k n'est pas trop grand car nous avons besoin de la profondeur Θ ( log k )k=ω(1)k=ω(1)kSO(logkn+logk)kΘ(logk)pour éloigner les éléments). Je m'attends à ce que le calcul puisse être rendu quasi linéaire si vous utilisez un assez petit .k

Depuis une comparaison avec oui probabilité que les déchets O ( 1 / n ) entropie, la randomisation initiale et la légère non - uniformité des éléments dans leurs intervalles de délimitation doit seulement besoin n o ( 1 ) déchets entropie. Si la mise en forme de la distribution réussit assez bien, les déchets d'entropie proviennent principalement de disparités de longueur d'intervalle pendant (*) (d'où le n 0,5 + o ( 1 ) ).1/2+n0.5O(1/n)no(1)n0.5+o(1)

Une combinaison possible de :lg(n!)+O(n0.5ε) si la mise en forme de la distribution fonctionne assez bien et que la taille du lot est égale et rejeter sélectivement n 0,5 + ε éléments dans (*) (ci-dessus), nous pouvons insérer tous sauf ces n 0,5 + ε avec des déchets d'entropie n 0,5 - ε / 2 + o|S|+n0.5+εn0.5+εn0.5+ε comme suit. FractionnerSen n ε intervalles presque égaux, et lorsque lors de l'insertion, I A se fixe sur un intervalle, rejeter (c'est-à-dire annuler l'insertion) si l'intervalle est trop long, réduisant ainsi la variation des longueurs de ces intervalles Θ ( n ε / 2 )fois, ce qui réduit à son tour les variations de longueur d'intervallesde longueur aléatoire n 1 - o ( 1 ) dans n ε / 2 - o ( 1 )n0.5ε/2+o(1)SnεIAΘ(nε/2)n1o(1)nε/2o(1)fois, au besoin. Maintenant, nous pouvons utiliser l' algorithme ci-dessus pour insérer les éléments restants avec des déchets O ( n 0,5 - ε ) si ε est suffisamment petit.lg(n!)+O(n1ε)O(n0.5ε)ε

Complexité du pire cas de tri: Très probablement, il existe un algorithme de tri avec comparaisons du pire cas. Pour trouver la médiane, il existe un écart linéaire entre le cas moyen ( 1,5 n + o ( n ) comparaisons) et le pire des cas (au moins ( 2 + ε ) n - O ( 1 ) comparaisons). Cependant, pour le tri, il y a beaucoup de liberté pour organiser des comparaisons et pour trouver de nouveaux algorithmes de tri.lg(n!)+o(n)1.5n+o(n)(2+ε)nO(1)

Dmytro Taranovsky
la source
1
Je pense que vous devriez écrire ceci comme un papier.
Emil Jeřábek le
@ EmilJeřábek D'accord. En tant que site de recherche, de nombreuses questions et réponses sont ici des mini-articles, mais avec la longueur et l'importance ici, un article formel est souhaitable. N'hésitez pas à me faire savoir (à [email protected]) quelles parties devraient être développées dans le document (cette réponse restant sous forme de version concise).
Dmytro Taranovsky