Nejjednodušší realizovat on-line seřazené datovou strukturu v C

hlasů
1

Jsem skenování velký zdroj dat, v současné době asi 8 milionů záznamů, extrakce na provázku na vstupu, které chci v abecedním pořadí.

Currenlty Dal jsem je do pole a pak třídit index se mezi ně qsort(), která funguje dobře.

Ale ze zvědavosti Přemýšlím namísto vkládání každý řetězec do datové struktury, která je udržuje v abecedním pořadí, jak jsem naskenovat je z datového zdroje, částečně pro zkušenostech emlplementing jednu, částečně proto, že se bude cítit rychleji bez čekání na druh dokončit po skenování dokončil (-:

Co datová struktura by nejpřímější implementovat v C?

AKTUALIZACE

K objasnění, jediné operace musím provádět vkládání položku a dumping index, když se to dělá, čímž mám na mysli pro každou položku v původním pořadí výpisu celé číslo představující pořadí, v jakém je v po roztřídění.

SOUHRN

  • Nejjednodušší implementovat jsou binární vyhledávací stromy.
  • Self vyvážení binární stromy jsou mnohem lepší, ale netriviální realizovat.
  • Vložení může být provedeno opakovaně, ale in-pořadí průchod pro vypsání výsledky a post-objednat traversal pro vymazání strom, když udělal obě vyžadují buď rekurzi nebo explicitní stack.
  • Bez provedení vyvážení, budou běhy objednané vstup vést k degenerované nejhorším případě, který je provázaný seznam. To znamená, že hluboké stromy, které vážně ovlivnit rychlost vložit operace.
  • Mírně míchání vstup může rozbít objednat vstup výrazně a je jednodušší implementovat toto vyvážení.
Položena 11/04/2011 v 18:23
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
3

Binární vyhledávací stromy. Nebo samovyvažující vyhledávací stromy. Ale nečekejte, že ti být rychlejší než řádně implementována dynamické pole, protože pole mají mnohem lepší lokalitu referenční než ukazatele struktury. Také nevyvážené BSTs může „jít lineární“, takže celá vaše algoritmus se stává O ( n ²), stejně jako quicksortu.

Odpovězeno 11/04/2011 v 18:24
zdroj uživatelem

hlasů
0

Dalo by se zavést rychlejší řazení algoritmus jako my Timsort nebo jiné třídicí algoritmy s nlog (n) nejhorším případě i jen hledat to pomocí binárního vyhledávání, protože jeho rychleji, pokud je seznam tříděn.

Odpovězeno 11/04/2011 v 18:29
zdroj uživatelem

hlasů
0

měli byste se podívat na Trie datová struktura wikilink Myslím, že to bude sloužit co chcete

Odpovězeno 18/04/2011 v 08:20
zdroj uživatelem

hlasů
2

Jste již pomocí optimální přístup. Uspořádat na konci bude mnohem levnější než udržovat online řazeny datovou strukturu. Můžete získat stejný O (LOGN) s RB-stromu, ale konstanta bude mnohem horší, nemluvě o významný prostor nad hlavou.

To znamená, že AVL stromy a Rb stromy jsou mnohem jednodušší realizovat v případě, nepotřebujete k podpoře odstranění. Levicový rb strom se vejde do 50 nebo tak řádků kódu. Viz http://www.cs.princeton.edu/~rs/talks/LLRB/ (o Sedgewick)

Odpovězeno 19/04/2011 v 05:31
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more