O (n) zamanındaki element farklılığı?


21

Karşılaştırma esaslı modeldeki element farklılığının zamanda yapılamayacağını hepimiz biliyoruz . Bununla birlikte, bir kelime-RAM'de, biri daha iyi olabilir.o(nlogn)

Tabii ki, eğer biri doğrusal zamanda hesaplanabilen mükemmel bir karma fonksiyonunun varlığını varsayarsak, elementin farklılığı için bir lineer zaman algoritması elde ederiz: sadece rakamları birer birer karıştırmaya devam edin ve bir çarpışma varsa 1 ile geri dönün.

Bununla birlikte, iki mesele var: 1) kullanılmış rastgelelik bulabildiğim mükemmel karma fonksiyonların çoğu yapısı ve 2) ön işlem zamanının herhangi bir yerinde bir tartışma bulamıyorum, yani hangi karma fonksiyonun ne olacağına karar vermek için gereken zaman Girilen sayı kümesini temel alarak kullanılır.

Fredman ve arkadaşlarının " en kötü durum erişim zamanı ile seyrek bir tabloyu saklamaO(1) 0 ( 1 ) " en kötü durumda erişim süresi ile bir karma işlevi sağlayarak ilk sorunu çözer , ancak ikinci sorun hakkında hiçbir şey söylemez .O(1)

Özetle, istediğim şey şu:

Verilen bir dizi olduğu bir algoritma Tasarım ve numaraları (her sayı olmak kelime uzunluğu olan bir kelime RAM uzun bit) , bir müzakere fonksiyonu, bulur olarak zaman, ki burada . İşlev için herhangi bir bu özelliğine sahip olması gerekir , elemanların sayısı, harita bu bir sabittir ve bilgisayar almalıdır, n ağırlık ağırlık h : S { 1 , ... , m } O ( n ) m = O ( n ) H j { 1 , ... , m } S j s ( i ) O ( 1 ) O ( 1 )Snwwh:S{1,,m}O(n)m=O(n)hj{1,,m}Sjh(i)O(1)"makul" bir kelime-RAM modelinde zaman, yani model, kelimelerdeki "egzotik" işlevlerin zamanda değerlendirilmesine izin vermemelidir .O(1)

Ayrıca, hash işlevlerini hiç kullanmayan sözcük-RAM'de element farkını çözmek için algoritmalar olup olmadığını bilmek isterim.


8
Re: "Ayrıca, karma işlevlerini hiç kullanmayan RAM kelimesinde elemanların farklılığını çözmek için algoritmalar olup olmadığını da bilmek istiyorum." - sadece ve doğrusal olmadığın sürece, RAM kelimesini sıralamaya çalışmak için çok fazla iş var (bkz. En.wikipedia.org/wiki/Integer_sorting ). Bu algoritmaların bazıları karma kullanır ancak diğerleri kullanmaz. o(nlogn)
David Eppstein

Yaklaşık çözümlere izin var mı?
AT

(Sanırım) Düşünme süreciniz bir adımı atlıyor: 1. Karşılaştırma modelinde en iyi karmaşıklığın olduğunu varsayıyorsunuz 2. RAM modelinde bunun nasıl geliştirilebileceğini soruyorsunuz. doğrudan RAM modelinde zamanında bir çözüm isteyiniz . Daha ziyade, RAM modelinde içindeki çözümleri çalışmalı ve geliştirip geliştiremeyeceğinizi görmelisiniz. O ( n ) o ( n log n )Θ(nlogn)O(n)o(nlogn)
Jeremy

Radix senin için çok mu yavaş?
Thomas Mueller

Yanıtlar:


8

Öğe ayırt edici özelliği, RAM modelinde süresi içindeki zamanla belirleyici olarak çözülebilir :O(nloglogn)o(nlogn)

Sıralama içinde zaman içinde için sayısı sıralama algoritması kullanılarak bit ( "sıralama BELİRLEME STOC 2002 Han tarafından tarif edilen zaman ve doğrusal uzay"), daha sonra çarpışmalar için doğrusal zamanda tarayın.n w O ( n log günlüğü n )O(nloglogn)nwO(nloglogn)

Bildiğim kadarıyla, bu bugün bilinen en iyi sonuç.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.