Basit ve pratik deterministik algoritma, karmaşık çalışma süresi


18

Çok sık olarak, bir algoritmanın çalışma süresi karmaşık bir ifadeyse, algoritmanın kendisi de karmaşık ve pratik değildir. Küp kökleri ve her biri asimptotik koşma zamanında faktörlere çalışma süresi için sabit faktörleri algoritmanın karmaşıklık ve aynı zamanda gizli eğilimindedir.loglogn

Bu temel kuralın başarısız olduğu çarpıcı örneklerimiz var mı?

Elbette, çok basit bir en kötü çalışma süresine sahip olmalarına rağmen uygulanması çok zor olan algoritma örneklerini bulmak kolaydır . Peki ya sohbet?

Uygulanması kolay ancak en kötü asimtotik çalışma süresi olarak çok karmaşık bir ifadeye sahip olan çok basit ve pratik deterministik algoritma örnekleri var mı?

Lütfen "deterministik" ve "en kötü durum" anahtar kelimelerine dikkat edin; basit randomize algoritmaların analizi oldukça karmaşık ifadelere yol açar.

Elbette "karmaşık" olan şey bir tat meselesidir. Her neyse, makalenizin başlığına koymak için çok çirkin bir ifade görmeyi tercih ederim. Ve bir doğal parametrenin (giriş boyutu, düğüm sayısı, vb.) Karmaşık bir işlevini tercih ederim .


PS. Bunu "büyük liste sorusu" yapmayacağım ve CW değil diye düşündüm . Tek bir mükemmel örnek bulmak istiyorum (eğer varsa). Bu nedenle, lütfen şimdiye kadar verilen yanıtların herhangi birinden "daha iyi" olduğunu düşünüyorsanız başka bir cevap gönderin.


2
AKS öncelik testi algoritması bir cevap niteliği taşıyor mu? Tereddüt ediyorum çünkü çalışma süresinin "karmaşıklığı", bir anlamda, primer dağılımının
takma adının

Benim durumum, en kötü durumun çoğu durumda "her şeyin üzerinden geçmesine" neden olan ve her şeyin çalışma zamanını ölçtüğümüz şey olduğu. Doğal olarak, kolay algoritmaların kolay WC çalışma süreleri vardır. Biraz hile yaparak biraz tıraş olmaya çalışırsak karmaşık çalışma zamanları ortaya çıkar. Ama sorunuz ilginç; Duygularımın doğru olup olmadığını kesinlikle merak ediyorum.
Raphael

@arnab: Teşekkürler, AKS iyi bir fikir. Ama "pratik" diyebileceğimizden emin değil miyim?
Jukka Suomela

Anket yayılımı, kısıt yayılımı veya sıralı TRW gibi mesaj aktarma şemaları "algoritma" olarak sayılıyor mu? Uygulaması kolay, çalışma zamanını tahmin etmek zordur
Yaroslav Bulatov

Hata! Her zaman Pollard'ın rho yöntemini seviyorum, basit ve pratik ve analiz gerçekten zor, ancak algoritmanın rastgele olması onu mesaja bir cevap olarak niteliksiz hale getiriyor ...
Hsien-Chih Chang 張顯 之

Yanıtlar:


20

Düşünebileceğim en iyi örnek , düzlemdeki n çizgisinin bir düzenlemesinde seviyesini hesaplamak için bir algoritmadır (aşağıda açıklanmıştır) , yani dikey olarak tam olarak k çizgileri olan noktaların oluşturduğu çokgen çizgidir . Bu sorun için bilinen en etkili algoritma değildir. Daha basit karmaşıklıklara sahip daha verimli algoritmalar var, ancak bunun çoğunun (hepsi değilse de) daha pratik olduğuna inanıyorum. Analiz muhtemelen sıkı değildir, çünkü ünlü bir açık problem olan k- düzeyi karmaşıklığını kullanır (analizdeki diğer tüm terimlerin sıkı olduğunu düşünüyorum). Yine de, k- seviyesi için geliştirilmiş sınırların çalışma süresini daha basit hale getireceğinden şüpheliyim . K = olduğunu varsayacağımknkkk karmaşıklığınısadece n'nin bir fonksiyonu olarak yazmak için.k=n/2n

Algoritma, çizgi tarama paradigmasına dayanır ve kinetik öncelik kuyrukları olarak iki -ary kinetik turnuva kullanır . Ekleme ve silme işlemleri, bir çizgi k seviyesinin üstüne veya altına gittiğinde , bir çizgiyi bir kinetik turnuvadan diğerine hareket ettirerek gerçekleştirilir. Bu nedenle, var olan O ( n, 4 / 3 ) (Dey'in için bağlı kullanılarak eklemeler ve silmeler , k -seviye karmaşıklığı). Her olay işlenir O ( log n ) zaman ve orada O ( n, 4 / 3 α ( n(logn)kO(n4/3)kO(logn) olaylar ( α ( n ) , satır segmentlerinin düzenlemelerinin üst zarfının karmaşıklığından gelirken log n / log log n , ( log n ) -ary ağacınınyüksekliğinden gelir). Toplam çalışma süresiO(n4/3α(n)logn/loglogn)α(n)logn/loglogn(logn)

O(n4/3α(n)log2n/loglogn).

Daha fazla bilgi ve referans için lütfen Timothy Chan'ın el yazması http://www.cs.uwaterloo.ca/~tmchan/lev2d_7_7_99.ps.gz adresine bakın. faktörü (intead bir ikili kullanarak kaldırılabilir ( log n ) kinetik turnuvası -ary), ama aslında ben gerçekleştirdiği testlerde kinetik öncelik sırası hızlandırır. Kinetik turnuva yerine kinetik bir yığın kullanılıyorsa karmaşıklık biraz daha çirkin ve kötüleşmelidir (algoritma hala pratik olacaktır) ( karekök içindeki bir kütük görünmelidir).1/loglogn(logn)log


Mükemmel örnek, teşekkürler! Bunu yenmek kolay olmayacak. :)
Jukka Suomela

1
Bu algoritma pratikte uygulanması kolay olan rastgele algoritmalardan daha yavaştır (bu algoritmalardan birini uygulayan biri olarak ("Düzlemsel bir düzenlemede yürüyüşe
çıkma

Aklımdakilere en yakın gibi göründüğü için bu cevabı kabul ettim. Ama herhangi birinin yeni fikirleri varsa, duymaktan mutluluk duyarım!
Jukka Suomela

24

Birlik bulma veri yapısı işlemleri ölçütlerinizi karşılıyor gibi görünüyor:

http://en.wikipedia.org/wiki/Disjoint-set_data_structure


2
Gerçekten de aynı cevabı gönderdim ama beni yendiğini fark ettikten sonra sildim. :) Bir teorisyen olmayanın bile keşfedebileceği basit ve zarif bir algoritma, ama ters Ackermann karmaşıklığı amorti etti.
Warren Schudy

Eh, sen karşılaştırmak eğer "karmaşık" görünmüyor zaman O ( n 4 / 3 α ( n ) log 2 n / log log n ) Guilherme yanıtında. :)Ö(α(n))Ö(n4/3α(n)günlük2n/günlükgünlükn)
Jukka Suomela

Algoritma uzunluğunun sendika bulma için kanıt karmaşıklığına oranı muhtemelen rakipsizdir - her üç işlem de dokuz satır kod mu?
Neel Krishnaswami

1
Sorunun karmaşık analiz ile basit ve pratik bir algoritma hakkında olduğunu düşünmüyorum . Bence soru karmaşık çalışma süresi olan basit ve pratik bir algoritma , yani üst sınır için elde edilen gerçek ifade ile ilgili.
Guilherme D. da Fonseca

6

Simpleks algoritması. Uygulaması kolaydır ve pratikte harika çalışır, ancak teorik olarak analiz etmek bir karışıklıktır.


n

aslında simpleks Klee-Minty inşaatı ile en kötü durumda üstel zaman aldığı bilinmektedir. Bence, Jukka'nın ne istediğine bir örnek değil
Suresh Venkat

1
Belki de simpleks algoritmasından ziyade simpleks yöntemini söylemeliydim. Klee-Minty küpü ve varyasyonları bazı vanilya pivot kuralları için işe yarar. Ancak, örneğin, rastgele faset dönüş kuralının çılgın bir üst ve (son) alt sınırı vardır. Gil Kalai'nin son sonuçlarda güzel bir blog girişi vardı. gilkalai.wordpress.com/2010/11/09/…
Mohit Singh

iyi nokta, Mohit. Ben de kafam karıştı.
Suresh Venkat

2

Bu "pratik" i düşünüp düşünmediğinizden emin değilim ama bu ünlü bir açık problem. Paul Erdos Collatz varsayımı hakkında şunları söyledi: “Matematik henüz bu tür problemlere hazır değil”

x=1


Ve bu algoritmanın çözdüğü sorun nedir?
Jukka Suomela

Yeni çalışma zamanı analiz tekniklerini aramanızı önerir.
Mohammad Al-Turkistany

2
daha sonra Collatz varsayımının bir kanıtı için kaba-kuvvet arayışının "yeni çalışma zamanı analiz tekniklerini" motive ettiğini söyleyebilirsiniz; her iki durumda da algoritma dikkatsizce bir digrafı araştırıyor. Collatz varsayımı eğlenceli, ama bunun "algoritma" nın ilginç bir örneği olduğunu düşünmüyorum.
Niel de Beaudrap

2

Bu örnek, isteğinizin mektubunu yerine getirmemekle ilgilenebilir, çünkü manevi bir yakınlık taşır. Özellikle, krep ve yanmış krep yığınlarını tersine göre sıralama sorunu.

http://en.wikipedia.org/wiki/Pancake_sorting

Bir uygulama alanı, genom yeniden düzenlemeleri hakkındaki soruların, çeşitli kurallara tabi olan permütasyon parçalarının tersine çevrilmesiyle permütasyonlar arasındaki mesafe açısından kaydedilebildiği hesaplama biyolojisine (genetik) yöneliktir.

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.