Fusion de listes d'objets fragiles


19

Contexte: Chao Xu a posté il y a quelque temps la question suivante: " Existe-t-il des algorithmes de tri de comparaison connus qui ne se réduisent pas à des réseaux de tri, de sorte que chaque élément est comparé fois?O(Journaln) ". Il semble que nous soyons un peu coincés avec le problème; J'ai discuté du même problème avec Valentin Polishchuk en 2009, et nous sommes arrivés nulle part.

Pour avoir de nouvelles idées, j'ai essayé de trouver la question la plus simple possible qui a une saveur similaire et n'est pas complètement triviale. D'où la question suivante.


Question: Vous obtenez deux listes triées, chacune avec éléments. Pouvez-vous fusionner les listes pour que chaque élément ne soit comparé que O ( 1 ) fois?nO(1)

Naturellement, la sortie doit être une liste triée qui contient les éléments.2n

[Cela s'est avéré être trivial, la réponse est "non".]


Question 2: Vous obtenez deux listes triées, chacune avec éléments. Pouvez-vous fusionner les listes afin que chaque élément ne soit comparé que O ( 1 ) fois, si vous êtes autorisé à supprimer une petite fraction des éléments ?nO(1)

Plus précisément, la sortie doit être une liste triée qui contient éléments, et une «poubelle» qui contient T ( n ) éléments. Comment pouvez-vous faire la valeur T ( n ) ? Obtenir T ( n ) = n est trivial. Quelque chose comme T ( n ) = n / 100 devrait être réalisable de manière simple. Mais pouvez-vous obtenir T ( n ) = o ( n2n-T(n)T(n)T(n)T(n)=nT(n)=n/100 ?T(n)=o(n)


Remarques:

  • Nous utilisons ici le modèle de comparaison. Algorithmes déterministes uniquement, nous nous intéressons aux pires garanties.

  • Notez que les deux listes ont exactement éléments. Si nous avions une liste avec n éléments et une autre avec 1 élément, la réponse est clairement «non»; cependant, si les deux listes sont longues, il semble que l'on pourrait être en mesure de faire un "équilibrage de charge".nn1

  • Cette fois, tout type d'algorithme est valide. Si votre algorithme utilise des réseaux de tri comme bloc de construction, cela convient parfaitement.

  • Pour un point de départ, voici un algorithme simple qui compare chaque élément au maximum 200 fois: Utilisez simplement l'algorithme de fusion standard, mais conservez des compteurs pour les têtes des listes. Une fois que vous avez atteint 200, jetez l'élément. Maintenant, pour chaque élément que vous supprimez, vous avez réussi à placer 200 éléments dans votre tableau de sortie. Vous avez donc atteint .T(n)=n/100


8
Vous avez dit: "Si nous avions une liste avec n éléments et une autre avec 1 élément, la réponse est clairement non." Le cas avec n éléments dans chaque liste n'est-il pas un problème plus général? Par exemple, si on nous promet que tous les éléments de la deuxième liste, à l'exception du premier élément, sont beaucoup plus grands que tous les éléments de la première liste, cela ne se réduit-il pas au premier problème?
Robin Kothari

@Robin: D'accord, j'ai donc échoué à trouver une question non triviale, merci. Votre observation semble donner une borne inférieure si nous insistons pour que tous les éléments soient triés. Permettez-moi d'augmenter légèrement la question ...Ω(Journaln)
Jukka Suomela

Et au cas où quelqu'un se demanderait à quoi sert la définition apparemment étrange de la question 2: si nous pouvons rendre très petit, nous pourrions peut-être utiliser quelque chose comme le tri par fusion pour presque résoudre le problème d'origine, et nous inquiéter d'une toute petite fraction d'éléments dans la corbeille plus tard. T(n)
Jukka Suomela

Réponses:


5

Non, un tel algorithme ne peut pas exister.

Assume sont autorisés comparaisons par élément.t

2t2t+1t+1

nn/2tn/2t

to(n)

Sur une note latérale, il semble qu'il soit possible de faire correspondre cela lié par un algorithme où chaque élément est comparé à environ logarithme de la taille de la partie environnante de l'autre liste. Si cela vous intéresse, je vais essayer de trouver les détails.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.