Element benzersizliği deterministik lineer zamanda çözülebilir mi?


9

Aşağıdaki sorunu düşünün:

Girdi : tamsayıların değerlerini listelerX,Y

Hedef : her iki listede de bir tamsayısı olup olmadığını belirlemenizi sağlar .x

Her iki listesinin boyutunda olduğunu varsayalım . Bu sorun için deterministik, doğrusal zaman algoritması var mı? Başka bir deyişle, bu problemi rasgele kullanmadan zamanında belirleyici olarak çözebilir misiniz ?X,YnO(n)

Ne yazık ki, liste öğelerinin hepsinin küçük olduğunu varsayamazsınız.


Rasgele bir algoritma kullanarak beklenen zamanda nasıl çözüleceğini görebiliyorum : rastgele bir 2-evrensel karma işlevi , öğelerini bir karma tabloya ( karma işlevi olarak kullanarak) depolayın ve sonra bakın her elemanıO(n)hXhYhashtable içinde olup olmadığını görmek için. Beklenen çalışma süresiO(n). Ancak, deterministik bir algoritmanın nasıl bulunacağını göremiyorumO(n)çalışma süresi. Bunu derandomize etmeye çalışır ve tek bir hash işlevini düzeltirseniz, bu yordamın çalışmasına neden olan en kötü durum girdisi olacaktır.Θ(n2)saati. Bulabildiğim en iyi deterministik algoritma, değerleri sıralamayı içerir, ancak bu doğrusal zaman olmayacaktır. Doğrusal çalışma süresine ulaşabilir miyiz?

Ayrıca, tüm liste öğelerinin aralıkta tamsayı olduğunu varsayarsanız, doğrusal zamanda nasıl çözüleceğini görebilirim [1,n] (temel olarak, sıralama saymak) - ama bunu kabul edemediğimizde genel durumda ne olacağı ile ilgileniyorum.

Cevabı hesaplama modeline bağlıysa, RAM modeli aklına sıçrar, ancak makul bir hesaplama modeli için sonuçlarla ilgilenirim. farkındayımΩ(nlogn) eleman benzersizliği için karar ağacı algoritmaları için daha düşük sınırlar , ancak bu kesin değildir, çünkü bazen bir zaman bile olsa doğrusal zaman algoritmaları bulabilirizΩ(nlogn) karar ağacı modeline bağlı.


Hashtables çarpışmalarla başa çıkmanız gerektiğinden O (n log n) şeklindedir.
Thorbjørn Ravn Andersen

1
@ ThorbjørnRavnAndersen, bunu nereden aldığını görmüyorum. 2-evrensel hash fonksiyonları ve uygun boyutlu bir hash tablosu kullanmak, hash çarpışmalarının sayısının (yüksek olasılıkla) minimum olmasını sağlar, bu yüzden inanıyorumO(n)çalışma süresi elde edilebilir. Nereden geldiğinden emin değilimO(nlgn)den; özel bir şey yapmazsanız (2-evrensel karma kullanmak gibi), en kötü durumO(n2), çarpışmalar nedeniyle.
DW

Şeytan ayrıntıda, burada "uygun büyüklükte bir karma tablo". Çarpışma istemiyorsanız, bu oldukça büyük olabilir. Tipik n-log-n (doğru hatırlarsam), karma işlev çarpışmalarını bir listeyle işlemek içindir.
Thorbjørn Ravn Andersen

1
@ ThorbjørnRavnAndersen Aynı adrese eşlenen beklenen anahtar sayısı sabittir (aşırı yüklenmemiş tablolar için), bu nedenle çarpışma çözünürlüğü önemsizdir. Ayrıca buraya bakınız .O(nlogn)listeler yerine (harici) dengeli BST kullanırsanız en kötü duruma uyar.
Raphael

Yanıtlar:


1

X ve Y'deki her olası değer için biraz belleğiniz varsa, doğrusal zamanda sorunu çözebilirsiniz. Bu, X ve Y sıralamasında herhangi bir kısıtlama getirmez.

  1. Başlangıçta tüm bitler ayarlanmamıştır.
  2. Karşılık gelen biti ayarlayarak X üzerinde tekrarlayın.
  3. Karşılık gelen bitin yukarıda ayarlanıp ayarlanmadığını Y üzerinden yineleyin.

2
Ne yazık ki, tüm tamsayıların küçük olduğunu varsayamazsınız (bu algoritmanın çalışacağı kadar küçük olduklarını varsayamazsınız). Genel durumda, bu algoritmanın çalışma süresi liste öğelerinin bit uzunluğunda üstel olacaktır. Yine de teşekkürler!
DW

O zaman buna "uygun büyüklükte bir bit dizisi" adını verelim. Ayrıca bit uzunluğunda doğrusal log-n'ye eşdeğerdir. Giriş verilerinde herhangi bir kısıtlama veya ön koşul olmadan oturum açma performansı elde etmek konusunda ciddi misiniz?
Thorbjørn Ravn Andersen

2
@ ThorbjørnRavnAndersen Boşluk bit uzunluğunda üsteldir (olası tüm değerlerden eşlemeniz gerekir) ve zaman, toplam liste boyutunda doğrusaldır (her iki listedeki tüm değerlere bakmanız gerekir). Bit uzunluğunda hiçbir şey doğrusal değildir.
wchargin

0

İki listenin tamsayı içerdiğini söylediğiniz için, sanırım iki listede bir sayı tabanı sıralaması yapabilir ve daha sonra eşdeğer öğeler için iki listeyi karşılaştırarak doğrusal bir arama yapabiliriz.


4
Bu yalnızca sayıların büyüklüğünde bir sınır varsa çalışır.
Luke Mathieson

ancak yüksek büyüklüğün sadece sıralama saymak için bir sorun olacağını düşündüm ve sayı tabanı sıralaması için bu sorunu çözmek için yeterince yüksek bir sayı
tabanı seçebiliriz

Numaralardan biri 2 ^ (2 ^ 128) ise ne olur?
miniBill

@anirudh ancak farklı giriş boyutları için farklı bir algoritmaya sahipsiniz - yarıçapı her artırdığınızda daha büyük bir alfabeye ihtiyacınız var, sadece artan büyüklüğü karmaşıklığı alfabe boyutunu artırmak için dışa aktarıyorsunuz. Tabii ki bu sadece teoride de mümkün, çok fazla donanımın sayıları temsil ettiği tabanı değiştirmenize izin vermediğini düşünmüyorum (giriş ve çıkış uçlarında rol yapabiliriz, ancak (çoğunlukla) ikiliye kadar kaynar ).
Luke Mathieson

0

Neden her bir listenin tam sayılarını basit bir bitsel aramaya eklemiyorsunuz? Bu uygun olmadığı için optimal olmaz mı?O(nm¯), nerede m¯tamsayıların ortalama bit boyutudur; özellikle, nasıl daha iyi yapabileceğinizi görmüyorum, sadece * okuma * iki liste bu kadar zaman alacaktı.


Notun için teşekkürler. Sorunun bu noktayı ele alan son paragrafına bakın. RAM modelinde, sen yapabilirsiniz iki listeleri okumakÖ(n) zaman - almaz Ö(n\ Overbarm)saati. Böylece hesaplama modeli devreye giriyor - bu cevap aslında deterministik lineer zamanın imkansız olduğunu kanıtlamıyor.
DW

@DW RAM modelinde, bir kelime boyutu var w ki bu sabittir ve m ve böylece de m¯, bu da çalışma süresiyle sonuçlanır O(n)ya da yanılıyor muyum?
Realz Lahana Salatası

hmm belki düşünüyor wsabit bir hatadır.
Realz Lahana Salatası

(w sabit kabul edilmez, ancak n: herhangi bir sabit çoklu olabilir m neyi temsil etmek için gerekli olduğunun n (temsil edecek kadar geniş nm), sadece keyfi olarak büyük değil .)
greybeard

-1

Bir n sayı kümesine sahip olduğunuz ve tüm öğelerin farklı olup olmadığını belirlemek istediğiniz Elemet Uniqueness sorununa benzer. Problem cebirsel bir hesaplama ağacına sahiptir.O(nlogn).


1
Soru, log-lineer değil lineer deterministik zaman hakkında oldukça açıktır. Ayrıca setin (hangi değerde değil) sadece benzersiz elemanlara sahip olup olmadığını belirlemek için loglinear'dan daha hızlı yapabilirsiniz.
Evil

1
Demek istedin Ω(nlogn)? Eğer öyleyse, bu sorudaki sorunun doğrusal zamanda çözülemeyeceğini düşündürebilir. Ancak sadece ilgili bir sorunun log-lineer zamanda çözülebileceğini söylemek soruyu gerçekten cevaplamaz. (cc @EvilJS)
David Richerby

1
Notun için teşekkürler. Sorunun son cümlesini kaçırıp kaçırmadığınızı merak ediyorum. Burada tekrar edeceğim: "FarkındayımΩ(nlogn) eleman benzersizliği için karar ağacı algoritmaları için daha düşük sınırlar , ancak bu kesin değildir, çünkü bazen bir zaman bile olsa doğrusal zaman algoritmaları bulabilirizΩ(nlogn)"Başka bir deyişle, bu cevap soruyu cevaplamıyor; sadece farkında olduğum soruda söylediğim, ancak soruyu çözmeyen bir şeyi tekrarlıyor.
DW

İçinde yapılabilir O(nloglogn) verilenden daha iyi zaman O(nlogn), bu yüzden emin değilim Ω(nlogn), ancak bu DW sorusunu çözmez. Sadece buraya yorum yap.
Kötülük
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.