2010-11-21 13 views
3

Bu bir röportaj sorusudur: Hindistan'ın 1,14 milyar nüfusu göz önünde bulundurulduğunda, onları en yüksek seviyesine göre sıralamak için kullanılabilecek en etkili/verimli sıralama algoritması hangisidir? (Yükseklik verileri sizin için mevcuttur). olası yükseklikleri aralığı oldukça küçük olduğundan1.14 milyar insanın yüksekliğini sıralamak için sıralama algoritması!

+0

Uhm, quicksort? – cdhowie

+0

hızlı sıralama, hepsi bir kerede bellekte tutulabilirlerse iyi olur. Ve bellek dışı sıralama gerekli olacaktır. – winwaed

+2

Neden bellekte bir sıralama gerekecek? Soru donanım gereksinimlerini belirtmiyor, bu nedenle neden 1.14 milyar girişe sahip belleği olan donanımları kullanmıyorsunuz? – Slartibartfast

cevap

4

, ben tavsiye:

  1. milimetre tüm yükseklikleri ifade edin.
  2. Min ve maksimum yükseklikleri hesaplayan verilerden bir geçiş yapın.
  3. Min ve max arasında çok yüksekliğe sahip kutuları ayırın.
  4. İnsanları uygun kutulara ekleyen verilerden ikinci bir geçiş yapın.

Veri kümesinden iki geçiş, ayrıca bin ayırma sayısı. O (n).

+0

İlk iterasyona gerek yoktur, değerlerin 0 ile 3000 mm arasında olacağını garanti ederim. – ruslik

+0

Adım 2, zorunlu değildir. Milimetrede 0'dan 9 feet'e kadar 2700'den fazla bidon yeterlidir. – Blastfurnace

+0

Ve sonuç olarak, her ikisini de atlayabilirsiniz :) – ruslik

10

O (n):

yükseklikleri en yakın mm'ye yuvarlanabilir Eğer

, o zaman yükseklikleri histogramını hesaplamak ve sırayla her histogram kova sayımları yazdırabilirsiniz. Gerekli beklenen RAM, yaklaşık 2000 32 bit'lik bir intihar için yalnızca birkaç KB'dir.

2

Benim tahminim görüşmeyi farklı yüksekliklerde sayısı Θ(n+k), nerede bir kötü durum aşaması karmaşık bölümü olan çeşit uygun olacağını sayma anlamına gelir kişi sayısına, önemli ölçüde daha küçük olduğunu varsayar olmasıdır n, kullanıcıların sayısıdır ve k, yükseklik sayısıdır.

tür sayma bir karşılaştırma çeşit olmadığından, görüşmeyi yapan gerçekten nereyevaracağını muhtemelen geçerli değildir alt sınır tipik Ω(n×log n).

0

Sınırlı sayısal veriler için başka bir doğrusal zaman seçeneği, bin sorting'un yalnızca özel bir sayısal sürümü olan radix sort'dur.

İlgili konular