2012-03-21 24 views
8

Kabarcık sıralama, seçim sıralama, birleştirme sıralama, yığın sıralama, kova sıralama vb. Içeren sıralama yöntemi okudum. Ayrıca, hangi sıralama etkin olduğunu bilmek için bize yardımcı olan zaman karmaşıklığı içerir. Bu yüzden temel bir sorum vardı. Verileri içerirsek, nasıl sıralamayı seçeceğimizden daha iyi olur. Zaman karmaşıklığı, sıralama yöntemine karar vermemize yardımcı olan parametrelerden biridir. Ama sıralama yöntemini seçmek için başka bir parametremiz var mı?Bir sıralama algoritması seçmek için kriterler nelerdir?

Sadece daha iyi bir anlayış için sıralama yapmayı denemeye çalışıyorum.

  1. nereye Yığın kullanırım:

    yığın sıralama hakkında bazı sorgu yaşıyorsunuz?

  2. yığın tür büyük avantajı nedir (zaman karmaşıklığı O hariç (n log n))?

  3. yığın sıralama dezavantajı nedir?

  4. yığın için zaman inşa nedir? (O (n) 'yi duydum ama emin değilim.)

  5. Yığın sıralamasında veya sıralamasında kullanmamız gereken herhangi bir senaryo daha iyi bir seçenek (öncelik sırası hariç)? veriler üzerinde Yığın uygulamadan önce

  6. , parametre ne verilerine bakacağız nelerdir?

+1

"Verileri içerirsek" ile ne demek istiyorsun? Belirli bir veri kümesi için bir sıralama yöntemini nasıl seçeceğinizi mi soruyorsunuz? – Cameron

+1

Önceki sorularınızın cevaplarını kabul etmediniz. Bu size yardım etmekten çok fazla insanı bırakacak. – chrisaycock

+1

Sorunuz daha iyi ifade edildi * Bir sıralama algoritması seçmek için kriterler nelerdir? * Eğer öyleyse lütfen Q başlığını düzenleyin. –

cevap

10

Sıralama algoritmalarının iki temel teorik özelliği zaman karmaşıklığı ve alan karmaşıklığıdır. Genelde

, time complexity bize veri boyutu olarak algoritma değişiklikleri performans artışı ayarlamak nasıl bilmesini sağlar. Dikkate alınması gerekenler:

  • Sıralamak için ne kadar veri bekliyorsunuz? Bu, çok düşük bir zaman karmaşıklığına sahip bir algoritma aramanız gerekip gerekmediğini anlamanıza yardımcı olacaktır.
  • Verileriniz ne kadar seri? Kısmen sınıflandırılacak mı? Rastgele sıralanmış mı? Bu, sıralama algoritmasının zaman karmaşıklığını etkileyebilir. Çoğu algoritmanın en kötü ve en iyi durumları olur - en kötü durumdaki veri kümesinde bir algoritma kullanmadığınızdan emin olmak istersiniz.
  • Zaman karmaşıklığı, çalışma süresiyle aynı değildir. Zaman karmaşıklığının sadece bir algoritmanın performansının, veri kümesinin boyutu arttıkça nasıl değiştiğini açıkladığını unutmayın. Her zaman bir girdiyi geçecek bir algoritma O (n) olur - bu performans, girdinin boyutuyla doğrusal olarak ilişkilendirilir. Ancak, her zaman veri kümesi üzerinden iki geçiş yapan bir algoritma da O (n) - sabit (ve gerçek çalışma süresi) farklı olsa bile, korelasyon hala doğrusaldır.

Benzer şekilde, uzay karmaşıklığı bir algoritma çalıştırmak gerekiyor ne kadar boşluk açıklanır. Örneğin, insertion sort gibi basit bir sıralama, o anda eklenen öğenin değerini saklamak için ek bir sabit alana ihtiyaç duyar. Bu, O (1) 'in bir yardımcı uzay karmaşıklığıdır - girdinin büyüklüğü ile değişmez. Ancak, merge sort, O (n) yardımcı alan karmaşıklığıyla çalışırken, bellekte ek diziler oluşturur. Bu, ihtiyaç duyduğu ekstra alan miktarının, girdinin boyutuyla doğrusal olarak ilişkili olduğu anlamına gelir.

Elbette, algoritma tasarımı genellikle zaman ve mekan arasındaki bir alıştırmadır - düşük alan karmaşıklığı olan algoritmalar daha fazla zaman gerektirebilir ve düşük zaman karmaşıklığı olan algoritmalar daha fazla yer gerektirebilir.

Daha fazla bilgi için, this tutorial yararlı bulabilirsiniz.


size yararlı Heap Sort üzerinde wikipedia sayfasını bulabilir, güncellenmiş soruya cevap vermek.

0

Ne tür bir sıralama türü için ölçütler kastediyorsanız, burada dikkate alınması gereken başka öğeler de vardır.

Sahip olduğunuz veri miktarı: Sizin için sıralanacak on, yüz bin veya milyonlarca öğeniz var.

Algoritmanın karmaşıklığı: Ne kadar karmaşık olursa, doğru olduğundan emin olmak için daha fazla test yapılması gerekecektir. Küçük miktarlar için, bir sıralama veya hızlı sıralama kodlamak ve sınamak kolaydır, ayıklamak istediğiniz veri miktarı için fazla olabilir başka türlü ayet.

Sıralamak ne kadar zaman alır: Büyük bir kümeniz varsa, kabarcık/hızlı sıralama çok zaman alacaktır, ancak çok fazla zamanınız varsa, bu bir sorun olmayabilir. Bununla birlikte, daha karmaşık bir algoritma kullanmak, ayırma süresini kısaltır, ancak kodlama ve test etme için daha fazla çaba sarfiyatında, sıralama uzun (saatler/günler) zamandan daha kısa bir süreye giderse buna değer olabilir.

Verilerin kendisi: Veriler her şey için aynı olmaya yakındır. Bazı türler için lineer bir liste ile sonuçlanabilirsiniz, bu nedenle verilerin kompozisyonu hakkında bir şey biliyorsanız, çaba için hangi algoritmanın seçileceğini belirlemeye yardımcı olabilir.

Kullanılabilir kaynak miktarı: Tüm öğeleri kaydettiğiniz veya öğeleri diske depolamanız gereken çok fazla belleğiniz var mı? Eğer her şey belleğe sığamazsa, birleştirme türü en iyisi olabilir, bellekte her şeyle çalışıyorsanız, başkaları daha iyi olabilir.