Hangi hesaplama modeli “en iyisi”?


41

1937'de Turing, bir Turing makinesini tanımladı. O zamandan beri birçok bilgisayar modelinin gerçek bir bilgisayar gibi bir model bulma girişimi olduğu, ancak algoritmaları tasarlayacak ve analiz edecek kadar basit olduğu belirtildi.

Sonuç olarak, farklı hesaplama modelleri için SORT problemi için bir düzine algoritmamız var. Maalesef, bit vektör işlemleri ile izin verilen bir sözcük RAM'inde O (n) çalışma süresi olan bir algoritmanın uygulanmasının, O zamanında çalışma süresi O (n⋅logn) olan bir algoritmanın uygulanmasından daha hızlı çalışacağından bile emin olamayız. RAM kelimesi (tabii ki sadece "iyi" uygulamalar hakkında konuşuyorum).

Bu yüzden, algoritmaların tasarımı için mevcut modellerden hangisinin "en iyisi" olduğunu anlamak istiyorum ve modellerin artılarını ve eksilerini ve gerçeğe yakınlıklarını veren hesaplama modelleri hakkında güncel ve ayrıntılı bir anket arıyorum.


1
Burada yönlendirilmiş olsa da MathOverflow ( mathoverflow.net/questions/44558/… ) ile çapraz yayınlanmış .
Dave Clarke,

@Tatiana, Güzel soru, "En iyisi" ile neyi kastediyorsunuz? "Gerçek" çalışma zamanına yakın teorik çalışma zamanına sahip bir modeli mi kastediyorsunuz?
Muhammed El-Türkistan

8
"Gerçek" çalışma sürelerini doğru bir şekilde modellemek istiyorsanız, önbellekleri doğru bir şekilde modellemeniz önemli olabilir. Özellikle, modern hesaplamada birçok katman önbelleğe (CPU, RAM, Disk vb.) Sahiptir; bazı katmanlar diğerlerinden daha yavaşdır; Bir algoritmanın "gerçek" çalışma zamanının önbellek kaçağı sayısına göre belirleneceği söz konusu değildir. Anekdotal olarak, lineer programlamadaki engelleme yöntemlerinin zayıf teorik garantilerine rağmen çok iyi performans göstermelerinin bir nedeni, genellikle önbellek açısından verimli olmalarıdır.
22

4
Söyleyebileceğim kadarıyla, mhumun dediği gibi, RAM modelinde öngörülen çalışma zamanlarının ve gerçek çalışma zamanlarının en büyük tutarsızlıkları genellikle veri alımı nedeniyle ortaya çıkar ... yanlış değişkenler önbellekte saklanır ve alma süresi yavaşlar. bu nedenle son derece aşağı. Bunu teorik bir hiyerarşik bellek modeliyle modellemek için bir takım girişimler olmuştur ve bu girişimlerin hiçbirinin çok başarılı olduğuna inanmıyorum, çünkü modeller kolayca çalışamayacak kadar karmaşık hale geliyor.
Peter Shor

2
Uygulamada faydalı olabileceğini düşündüğünüz bir algoritmaya sahipseniz ve gerçekten kullanıldığını görmek istiyorsanız, bunu sağlamak için yapabileceğiniz en iyi şey, uygulamak veya uygulamak için bir başkasını elde etmektir (iyi olmasa bile). pratik yazılıma dahil edilecek kadar uygulama). Bununla ilgili bir vaka incelemesi için, LZW veri sıkıştırma algoritmasının geçmişine bakın. Aslında, önbelleklemenin algoritmayı nasıl etkilediğini anlamaya çalışmanın muhtemelen bir anlamı yoktur; Aksi halde hiç kimse sonuçlarınıza önem vermeyecektir.
Peter Shor

Yanıtlar:


30

Her zaman standart Word RAM modelini sizin açınızdan "en iyi" olarak kabul etmişimdir. C gibi bir dilde programlamayı öğrenen herkes (ya da Java gibi gevşek eşdeğerler vb.), Bir bilgisayar düşünürken tam olarak bu modele sahiptir.

Elbette, çalıştığınız rejimlere bağlı olarak bazen genellemelere ihtiyaç duyarsınız. Harici bellek modeli akılda tutulması gereken önemli bir modeldir. Yalnızca disklerle çalışırken değil, aynı zamanda önbelleği anlamanız (sizi ilgilendirmeye zorlama) için de geçerlidir. Tabii ki, çok ciddiyetle muamele etmek de saçma sapan sonuçlara yol açabilir, çünkü saf harici bellek modeli hesaplamayı saymaz. RAM'ın bir başka genellemesi de paralelliktir, fakat şu anda biraz kafamız karıştı :)

O(n)O(nlgn)nn

Algoritmalar ve "gerçeklik" ile ilgili son bir açıklama: daima elde etmeye çalıştığınız şeyi aklınızda bulundurun. Algoritmalarla çalışırken, en zor problemleri çözmeye çalışıyoruz (örneğin 50 değişkende SAT veya bir milyar sayıyı sıralayarak). 200 sayıyı sıralamaya veya SAT'ı 20 değişkende çözmeye çalışıyorsanız, herhangi bir fantezi algoritmasına ihtiyacınız yoktur. Bu yüzden gerçekte çoğu algoritma önemsizdir. Bu, algoritmik araştırmalarla ilgili kötü bir şey söylemiyor - biz sadece zor olan gerçek sorunların bu olağandışı 1/1000'iyle ilgileniyoruz ...


Cevabınız için teşekkürler. RAM kelimesine hangi genellemelerin eklenmeye değer olduğunu anlamak istiyorum. Bit-vektör işlemleri, paralellik, önbellek gibi tüm bu hileleri içerecek ve hala basit olacak bir modeli tanımlayabilir miyiz?
Tatiana Starikovskaya

10

Geleneksel bir ortam düşünebilecek olsa bile, algoritmaları ne yazık ki analiz edebileceğiniz tamamen tatmin edici bir hesaplama modeli yoktur. Bu, tüm verilere kolayca erişilebileceğini ve çalışma alanının etkin bir şekilde sınırlanmadığını varsaymaktadır.

Çok bantlı Turing makinesi, kesinlikle teorik olarak iyi tanımlanmıştır ve bu modelde yıllar boyunca birçok algoritma tasarlanmış ve analiz edilmiştir. Ancak, bazılarına göre, gerçek bilgisayarların 21. yüzyılda kullanılacak iyi bir model olmak için nasıl çalıştığı ile yakından ilgili değil. Öte yandan, RAM-RAM modeli popüler bir hale geldi ve modern bilgisayarların (daha bitli olmayan sözcükler üzerindeki işlemler, hafıza yerlerine sürekli erişim) daha doğru bir şekilde işlediğini gösteriyor. Ancak, idealden daha az olan yönler vardır. Örneğin, bir tek kelime RAM modeli yoktur. Birincisi, kelimeler üzerinde hangi işlemlerin sabit sürede izin verileceğini belirlemelidir. Bunun için kabul edilmiş tek bir cevabı olmayan birçok seçenek var. İkinci, w kelimesi normalde, bellekteki herhangi bir öğenin sabit sayıda kelimeyle adreslenmesini sağlamak için giriş boyutuyla (en azından log (n) kadar hızlı) büyüyecek şekilde ayarlanır. Bunun anlamı, algoritmanızın üzerinde çalıştığı ve hatta daha da kötüsünü yaptığı sonsuz bir makine sınıfı olduğunu düşünmek zorundasınız, makine daha fazla veri besledikçe değişiyor. Bu en azından öğrencilerim arasında en safı için endişe verici bir düşüncedir. Sonunda, bir öğrenci olarak öğrenenlerle takılmayacak olan kelime-RAM modeli ile şaşırtıcı derecede karmaşıklık elde edersiniz. Örneğin, iki n-bit sayının çarpımı bu modelde O (n) zamandır ve basitçe bir n-bit dizesinde okumak, ani bir alt-line-time işlemidir. Bunun anlamı, algoritmanızın üzerinde çalıştığı ve hatta daha da kötüsünü yaptığı sonsuz bir makine sınıfı olduğunu düşünmek zorundasınız, makine daha fazla veri besledikçe değişiyor. Bu en azından öğrencilerim arasında en safı için endişe verici bir düşüncedir. Sonunda, öğrenci olarak öğrenenlerle takılmayacak olan kelime-RAM modeli ile şaşırtıcı derecede karmaşıklık elde edersiniz. Örneğin, iki n-bit sayının çarpımı bu modelde O (n) zamandır ve basitçe bir n-bit dizesinde okumak, ani bir alt-line-time işlemidir. Bunun anlamı, algoritmanızın üzerinde çalıştığı ve hatta daha da kötüsünü yaptığı sonsuz bir makine sınıfı olduğunu düşünmek zorundasınız, makine daha fazla veri besledikçe değişiyor. Bu en azından öğrencilerim arasında en safı için endişe verici bir düşüncedir. Sonunda, öğrenci olarak öğrenenlerle takılmayacak olan kelime-RAM modeli ile şaşırtıcı derecede karmaşıklık elde edersiniz. Örneğin, iki n-bit sayının çarpımı bu modelde O (n) zamandır ve basitçe bir n-bit dizesinde okumak, ani bir alt-line-time işlemidir.

Bunları söyledikten sonra, eğer algoritmanızın hızlı çalışıp çalışmadığını bilmek istiyorsanız, ya büyük olasılıkla :-)


2
Sanırım "makine giriş boyutu ile büyüyor" sorununu önlemek amacıyla bit yönünde veya kelime modeli aritmetik işlemlerinden kaçınıyorsanız, ancak hala uygun maliyetli bir RAM veya işaretçi makinesi kullanmak istiyorsanız, o zaman sadece kendinizi kandırıyorsunuzdur: diğer modellerde de aynı sorun var. Girdilerini nasıl endekslerler? Cevap: gerçek bilgisayarların belleği tükeniyor, ancak yine de RAM olduklarını varsaymak için algoritmalar tasarlamak daha uygun olmasına rağmen (veya belki de bellek hiyerarşisi maliyetlerini hesaba katan bir model kullanmak daha iyi) varsaymaktan daha uygun. bir DFA.
David Eppstein

4
Örneğin, Knuth’un tartıştığı bir RAM modeli, örneğin, w bitli bir adres aramak için zaman harcar ve iki w bitlik sayı eklemek için benzer şekilde w zaman harcar (bu, Theta (n log n) 'nin iki n'yi çarpmasıdır. -Bir RAM modelinde kelimeler üzerinde herhangi bir sabit zaman işlemi olmadan bit sayıları). En çok kabul gören modellerin son 20 yılda nasıl değiştiği ve kaç modelin hiç tartışılmadığı ilginçtir.
Raphael

8

Modeller sadece modellerdir. Çok fazla itmem; Algoritmalarınızın bazı yönleri hakkında bir şeyler söylüyorlar, ama gerçeklerin hepsini değil.

Ben basitçe analizde standart kelime RAM modelini kullanmanızı öneririm ve algoritmayı uygulamak ve uygulamada nasıl bir performans sergilediğini görmek.

(Aslında sadece algoritmanızı hiç çalıştırmadan uygulamak, size zaten çok şey anlattı ... Bir şey için, o zaman kesinlikle uygulanabilir.)


3
Benim iki itirazım var. İlk olarak, pek fazla teorisyen değil algoritmaları uygular ve yine de onları bir şekilde karşılaştırırız. İkinci olarak, basitliğini kaybetmeyen bir modele bir bilgisayarın hangi özelliklerini ekleyebileceğimizi anlamak istiyorum.
Tatiana Starikovskaya

11
David Johnson'ın bunun için çözüm önerisi, daha fazla insanın algoritmaları uygulamalarını sağlamaktı - ALENEX ve DIMACS Mücadelelerini buna hitap etmeye başladı. Bununla ilgili de bazı deneyimlerim var. Ken Clarkson ile pratikte iyi çalışacağını düşündüğümüz randomize bir dışbükey gövde algoritması geliştirdim. Clarkson, Bell Laboratuarlarında bir yaz öğrencisi vardı. Bu uygulamanın vaadine dayanarak, fikirler (Geometri Merkezinde yazılmış olan) qhull programına dahil edildi, ancak bazı sezgisel hızlandırmalarda, algoritmanın artık hızlı bir şekilde çalıştığını teorik olarak garanti etmediği anlamına geliyor.
Peter Shor

5

Hesaplama göreviniz veriyi (aritmetik) işlem yapmaktan daha fazla taşıyorsa, (veri kümeleri ana belleğe bile sığmayacak kadar büyüktür), o zaman G / Ç modeli ( Aggarwal ve Vitter tarafından 1988'de tanıtılır ) çok doğru olabilir. Ana bellekte büyük bir dizi öğeye izin vermek gibi işler için, G / Ç en uygun algoritmaları kullanmaya yardımcı olabilir (dikkatli bir uygulamada).

Modern çok çekirdekli bilgisayarlar için, Arge, Goodrich, Nelson ve Sitchinava tarafından 2008 yılında tanıtılan paralel değişken doğru bir model olabilir.


5

Hayatınızı daha karmaşık hale getirmek için "en iyi" hesaplama modelini kastediyorsanız, Wolfram'ın 2 durumlu, 3 sembollü üniversal turing makinesini kullanabilirsiniz.

PROS : mantık ve çılgınlık arasındaki ince çizgiyi yürüme hissi dışında hiçbiri;

CONS : tonluk ...

:-D (sadece bir şaka, temelde önceki cevaplara katılıyorum ...)


1

Daha teorik bir notta: Nanobilgisayarın Ultimate teorik modelleri makalesi , tersine çevrilebilen 3B mesh modelinin, başka hiçbir fiziksel modelin asimptotik olarak daha hızlı olamayacağı anlamında, optimum fiziksel hesaplama modeli olduğunu savunuyor . Işık hızı, Landauer prensibi ve Bekenstein bağları gibi fiziksel düşünceler tartışıldı.

Özetten alıntı yapmak için:

Mevcut teknolojiyi kullanarak, sadece birkaç yüz katman devresi içeren ters çevrilebilir bir makinenin mevcut makinelerin hepsinden daha iyi performans gösterebileceğini ve nanoteknolojiye dayalı ters çevrilebilir bir bilgisayarın olası geri dönüşümsüz teknolojiden daha iyi bir performans gösterebilmesi için sadece birkaç mikron olması gerektiğini keşfettik.

Tersine çevrilebilir 3B ağın silikon uygulamasının bugün bazı bilimsel ve mühendislik hesaplamalarını hızlandırmak için değerli olabileceğini ve modelin geniş bir yelpazedeki problemler için paralel algoritmalar teorisinde gelecekteki bir çalışmanın odağı olması gerektiğini öne sürüyoruz.

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.