En kolay C çevrimiçi Sıralanan veri yapısını uygulamak için

oy
1

Ben alfabetik sırayla istediğiniz girişin başına dizeye ayıklanması, şu anda, yaklaşık 8 milyon girdileri büyük bir veri kaynağını tarıyorum.

Currenlty kullanıyorum onlara sıralama daha sonra bir dizideki bir dizin koyun qsort()çalışıyor hangi.

Ama meraktan bunu için beklemeden daha hızlı hissedeceksiniz kısmen, kısmen birini emlplementing deneyimi için, bunun yerine veri kaynağından taramak olarak alfabetik sırayla koruyan bir veri yapısı içine her dizenin eklenmesi düşünüyorum : - tarama tamamlandıktan sonra sıralama (tamamlamak için

C uygulamak için en basit hangi veri yapısı olurdu?

GÜNCELLEŞTİRME

netleştirmek için, ben gerçekleştirmek için gereken tek işlem bir madde eklenirken ve bunu sıraladıktan sonra ise sırasını gösteren bir tamsayı dökümü orijinal sırayla her bir öğe için ortalama hangi bitti endeksi, damping.

ÖZET

  • uygulamak için en kolay ikili arama ağaçları bulunmaktadır.
  • Kendinden dengeleme ikili ağaçlar çok daha iyi ama uygulamak nontrivial bulunmaktadır.
  • Ekleme iteratif yapılabilir, ancak her ikisi de ne zaman bitmiş ağaç silinmesi için sonuçları ve sonrası geçişine boşaltılması için de sipariş geçişi Özyinelemeyi veya bir açık yığını ya da gerektirir.
  • dengeleme yerine getirilmeden, sıralı giriş çalışır bağlantılı listesidir dejenere kötü durumda neden olacaktır. Bu ciddi ekleme işlemi hızını etkileyecektir derin ağaçları anlamına gelir.
  • kadar zarar verebilir hafifçe girişi Karıştırılıyor anlamlı girişi emretti ve bu dengeleme uygulamak daha kolaydır.
Oluştur 11/04/2011 saat 18:23
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
3

İkili arama ağaçları. Ya kendini dengeleyen arama ağaçları. Diziler beri Ama, bu bir düzgün bir şekilde uygulandığı dinamik dizinin daha hızlı olmasını beklemeyin çok işaretçi yapılarının daha referansın iyi yerellik. Tüm algoritma (O olur, böylece Ayrıca, dengesiz BSTS, "doğrusal go" olabilir n ²), sadece quicksort gibi.

Cevap 11/04/2011 saat 18:24
kaynak kullanıcı

oy
0

Daha hızlı bir sıralama algoritması böyle bize Timsort veya nlog (n) en kötü durumda olan diğer sıralama algoritmaları uygulamak ve sadece daha hızlı liste sıralanır eğer onun beri İkili arama kullanarak arayabilirsiniz.

Cevap 11/04/2011 saat 18:29
kaynak kullanıcı

oy
0

Eğer Trie veri tipleri de bakmak gerekir vikibağlantı ben bu istediğini etmeyecek

Cevap 18/04/2011 saat 08:20
kaynak kullanıcı

oy
2

Zaten en uygun yaklaşım kullanıyor. sonunda sırala bir online veri yapısını sıralanmış muhafaza daha ucuz olacaktır. Bir rb-ağacı aynı O'yu (logn) alabilirsiniz ama sürekli önemli uzay yükü bahsetmiyorum, çok daha kötü olacaktır.

Yani, AVL ağaçları ve rb-ağaç silme işlemini desteklemek için gerekmiyorsa uygulamak için çok daha basittir. Sol eğilimli kod 50 ya da çizgilerin sığabilecek rb ağacı. Bkz http://www.cs.princeton.edu/~rs/talks/LLRB/ (Sedgewick'e ile)

Cevap 19/04/2011 saat 05:31
kaynak kullanıcı

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