Non esiste un algoritmo di ordinamento con tutte le proprietà specifiche desiderate?


22

Sul sito Web Algorithms di ordinamento viene fatta la seguente richiesta:

L'algoritmo di ordinamento ideale avrebbe le seguenti proprietà:

  • Stabile: le chiavi uguali non vengono riordinate.
  • Funziona in posizione, richiedendo spazio extra.O(1)
  • Confronti chiave peggiore dei casi .O(nlg(n))
  • swap nel caso peggiore .O(n)
  • Adattivo: accelera fino a quando i dati sono quasi ordinati o quando sono presenti poche chiavi univoche.O(n)

Non esiste un algoritmo che abbia tutte queste proprietà, quindi la scelta dell'algoritmo di ordinamento dipende dall'applicazione.

La mia domanda è, è vero che

non esiste un algoritmo [di ordinamento] che abbia tutte queste proprietà

e se sì, perché? Che cosa c'è in queste proprietà che le rendono tutte impossibili da soddisfare contemporaneamente?


4
Probabilmente significano solo che nessun algoritmo di ordinamento noto ha tutte queste proprietà.
Yuval Filmus,

3
Esiste anche una riunione di ordinamento basata sul confronto 3 e 4?
Greybeard,

4
@JohnFeminella ha bisogno di almeno i confronti , ma come si fa che ci dicono nulla circa il numero di swap? Ω(nlog(n))
Tom van der Zanden,

2
@JohnFeminella Nitpick: "meglio di " è un'istruzione vuota. Dovresti usare o se vuoi parlare di limiti inferiori. Ω ΘO(_)ΩΘ
Raffaello

1
Qualsiasi algoritmo di ordinamento può essere reso stabile aggiungendo come chiave secondaria la posizione dell'elemento originale. Tuttavia, ciò non lo rende idoneo poiché richiederebbe O (n) memoria aggiuntiva.
Giovanni Botta,

Risposte:


6

WikiSort e GrailSort sono due algoritmi abbastanza recenti che eseguono confronti chiave , stabili, nel caso peggiore . Sfortunatamente non li capisco abbastanza bene da sapere se si avvicinano agli swap o sono adattivi, quindi non so se violano la quarta e la quinta condizione che hai.O ( n )O(n lg(n))O(n)

Dall'esame del documento "Unione stabile basata sul rapporto" di Pok-Son Kim e Arne Kutzner collegati alla pagina WikiSort GitHub, Kim e Kutzner affermano di avere un'operazione di "fusione" che è (WikiSort è una variante di Mergesort) ma non sono sicuro che ciò si traduca in WikiSort con swap. GrailSort è considerato più veloce (nella pagina WikiSort GitHub), quindi potrei immaginare che sia probabile che abbiano entrambi gli swap caso peggiore e siano adattivi.O(n)O(n)O(m(nm+1))O(n)O(n)

Se qualcuno riesce a capire WikiSort e / o GrailSort li apprezzerei anche rispondendo alla mia domanda aperta al riguardo



3

Nessun algoritmo noto soddisfa tutte queste proprietà. Queste proprietà sono diventate ricercate quando abbiamo sviluppato più algoritmi di ordinamento. Ad esempio, l'ordinamento a bolle (probabilmente l'algoritmo di ordinamento più primitivo), molto probabilmente non era stabile nella prima implementazione, ma è stato progettato per essere stabile poiché gli scienziati informatici hanno cercato di renderlo più efficiente nelle implementazioni successive. Pertanto, molto probabilmente gli informatici hanno scelto i migliori tratti dai migliori algoritmi e, di conseguenza, hai portato un elenco di tutti questi tratti desiderabili. In realtà, è difficile avere il meglio di tutti i mondi in qualsiasi cosa. Non impossibile, ma forse impossibile con le nostre architetture attuali.

PS Usa Big-O ( ) come limite superiore asintotico e Big-Omega ( ) come limite inferiore asintotico. Theta ( ) per l'intermediario.Ω ΘOΩΘ


1
Benvenuto! Questo è carino ma non vedo cosa la stabilità abbia a che fare con l'efficienza: è semplicemente una preferenza che le sezioni dell'elenco con chiavi identiche non debbano essere "casualmente" permesse dall'algoritmo.
David Richerby,

Sì, ma è dimostrabile possibile o impossibile?
James Faulcon,

1

(Anche se questa è una vecchia domanda, mi sono imbattuto in esso e così potrebbero altri.)

Esiste davvero un algoritmo che soddisfa (1) - (4) e la seconda metà di (5), quindi si avvicina molto al requisito di cui sopra. È descritto in [1] e combina diversi trucchi inventati negli ultimi decenni.

[1]: Franceschini, G. Theory Comput Syst (2007) 40: 327. https://doi.org/10.1007/s00224-006-1311-1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.