Neden bir algoritmanın bit dizesi olarak gösterilebileceğini varsayabiliriz?


17

Hesaplamalı Karmaşıklık ve Turing Makineleri hakkında bir kitap okumaya başlıyorum. İşte alıntı:

Bazı kanonik kodlamaya karar verdikten sonra bir algoritma (yani bir makine) bir bit dizesi olarak temsil edilebilir.

Bu iddia basit bir gerçek olarak sağlanıyor, ama anlayamıyorum.

Örneğin, giriş olarak alan ve hesaplayan ( x + 1 ) 2 veya:x(x+1)2

int function (int x){
   x = x + 1; 
   return x**2; 
}

Bu alfabe kullanılarak dize olarak nasıl temsil edilebilir ?{0,1}


38
Metnin nasıl kodlandığını anlamak için gereken asgari gerekli bilgiyi bilmiyorsunuz. Bugün öğrenmek için harika bir gün! joelonsoftware.com/2003/10/08/...
Eric Lippert

1
Bence OP alıntılanan metindeki belirsizliğe dayanan farklı bir bakış açısıyla geliyor olabilir. Sanırım OP Turing makinesinin girdisi değil, 'tüm makine ve algoritma nasıl bir bit dizesi olarak inşa edilebilir' anlamına geliyor. Alıntılanan metin, tüm algoritmanın kendiliğinden yürütülebileceğini ima eder, ancak utf kodlu bir c dili biti, bir makinenin aslında bu dizede nasıl davranacağı hakkında hiçbir şey söylemez.
Sentinel

3
... Sanırım buradaki herkes kaynağı yanlış anlıyor ve şakayı Roma'nın deneyimsizliği pahasına çok ileriye götürüyor. Bu yorumların ve cevapların çoğu, metni rastgele iletim için kodlamaktan bahsederken, alıntı bir turing makinesi tarafından tüketim için algoritmayı kodlamaktan bahsediyor. (Şu anda) kabul edilen cevap en azından ikinci cümlede dokunmaktadır.
Izkata

2
@Izkata Evrensellik nedeniyle bu iki ifadenin eşdeğer olduğunun farkında olup olmadığınızdan emin değilim.
Konrad Rudolph

15
Komik olan şey, kodlanmış algoritmanızı okuyabilmem için , yazdığınız anda mutlaka bir bit dizisine dönüştürülmesi gerektiğidir. Klavyenizden monitöre kadar hiçbir zaman farklı bir şekilde temsil edilmedi. Sadece aklımızda ikili olmayan bir temsil vardı; ve fizyolojik düzeyde, sinapslara baktığınızda, bu tartışmalı bile olsa.
Peter - Monica'yı yeniden

Yanıtlar:


45

Sorunuzun en saf ve basit cevabı, sağlanan kodun (ve derlenmiş makine kodunun) aslında {0,1} * sözdizimsel dizeleri olarak temsil edilmesidir. Ayrıca, turing makineleri hakkında konuştuğunuz için, çalıştırdıkları programlar doğrusal bir işlem / talimat listesi olduğundan, bunların bit / bayt olarak gösterilmemesinin bir nedeni yoktur.


Turing makinesini talimatlar listesi olarak tam olarak nasıl temsil ediyorsunuz? Her zamanki tanım böyle bir şeydir .
svick

@svick Aşağıdaki cevabımda belirtildiği gibi, TM'nin tanımını girdi olarak alan (uygun bir şekilde kodlanmış) evrensel bir TM kullanıyorsunuz
dseuss

@svick Bir işaretçiyi kasete doğru hareket ettirmek için basit yönergeleri içeren bir programlama dili mi? Bunun bir örneğinin ezoterik programlama dili Brainfuck olabileceğine inanıyorum . Örnek kod
LukStorms

@LukStorms Artık buna "Turing makinesi" diyebileceğinizi sanmıyorum.
svick

52

Bu işlevin zaten metin olarak bir temsiline sahipsiniz. ASCII kodlamasını kullanarak her karakteri bir bayt değerine dönüştürün. Daha sonra sonuç bayt bir dizi, örneğin, bir bit dizisi, örneğin, alfabe üzerinde bir dize . Bu bir örnek kodlamadır.{0,1}


Kesinlikle. Yukarıda da söylediğim gibi, Roma yazarken oldu. Monitörümde gördüğüm glifler bile, ikili denetleyiciler aracılığıyla ikili bir ağa bağlı ikili bellekten ikili veri bağlantısı üzerinden gönderilen ikili bilgiler, yani ikili bilgilerdir. Her algoritmayı bir bit dizesi olarak temsil etmek mümkün müdür ? Bundan da fazlası: kendinizi analog medya ve yüz yüze iletişim ile sınırlamadığınız sürece kaçınılmazdır .
Peter - Reinstate Monica

@ PeterA.Schneider Analog ortam veya yüz yüze kullanılması, katıştırılmış ayrık kodlama olmadığı anlamına gelmez. Doğal bir dil kullanmak, ayrı bir kodlama kullanmaktan uzak değildir, değil mi?
Jean-Baptiste Yunès

32

Direnem ...

⡂⡀⣀⢀⣄⡀⣰⡉⡀⠀⡀⡀⣀⠀⢀⣀⢀⣄⡀⡂⢀⣀⡀⢀⢀⡀⠀⡰⣀⠀⣀⠀⡂⡀⣀⢀⣄⡰⡀⢠⠂
⡇⡏⠀⡇⡇⠀⢸⠀⡇⢀⡇⡏⠀⡇⣏⠀⠀⡇⠀⡇⣏⠀⣹⢸⠁⢸⠀⡇⢈⠷⡁⠀⡇⡏⠀⡇⡇⠀⡇⢼⠀
⠁⠁⠀⠁⠈⠁⠈⠀⠈⠁⠁⠁⠀⠁⠈⠉⠀⠈⠁⠁⠈⠉⠁⠈⠀⠈⠀⠱⠉⠀⠉⠀⠁⠁⠀⠁⠈⠱⠁⠘⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢤⡀⡤⠀⣀⣀⣀⠀⢤⡀⡤⠀⠀⢰⠀⠀⢹⠠⠀
⠀⠀⠀⣠⠛⣄⠀⠒⠒⠒⠀⣠⠛⣄⠀⠉⢹⠉⠁⢸⢀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀
⠀⠀⠀⣄⢄⠤⢄⢴⠤⢠⠀⢠⢠⡠⢠⡠⢄⠀⢤⡀⡤⢺⡖⠐⣷⠂⠊⢉⡆
⠀⠀⠀⡇⠸⣍⣉⠸⣀⠸⣀⢼⢸⠀⢸⠀⢸⠀⣠⠛⣄⠀⠀⠀⠀⠀⣴⣋⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

⢱⠀
⢸⠁
⠊

(Yukarıdaki noktalar olanları, boşluklar sıfırları temsil eder).


5
Eğlenceli (+1) ancak kodlamanın esasen keyfi doğasının altını çizmeye yarar.
John Coleman

4
Bunun için derleyiciyi yazarken iyi eğlenceler :)
Barmar


1
@Barmar codegolf.stackexchange.com için bir meydan okuma gibi geliyor
IMSoP

1
@RomaKarageorgievich , Braille karakterlerine renderleme yapan fonksiyon . İşte komut satırından çağrılmasına izin veren basit bir sarmalayıcı .
leftaroundabout

13

Bilgisayarınız, her şeyi nasıl yaptığını sormak için yazdığınız soru da dahil olmak üzere dizileri 0ve saklar 1. Örneğin, her harf ve sembol 8-bit ile temsil edilir (şeylerin eskiden olduğu şeyden bahsediyorum, bugünlerde 16-bit ve daha karmaşık). Onları burada görebilirsiniz . Bitleri değil, onaltılı ve sekizli kodları gösteriyorlar. Bir sayıyı dijital gösterimine nasıl dönüştüreceğinizi biliyor musunuz?


6
Yalnızca Windows ve UTF-16 kullanan Qt veya ICU gibi bazı kitaplıklarda 16 bayt. Ve tüm harfler bile UTF-32'de bile genel olarak tek bir kod birimi almaz, bu yüzden daha uzun olabilirler. Bu yüzden bu tartışmada ASCII'ye bağlı kalmanın daha iyi olduğunu düşünüyorum, Unicode'u buraya getirmek oldukça karışıklığa neden olacak.
Ruslan

8

Bu kavramın ardındaki temel hipotez Church-Turing tezidir . Herhangi bir algoritmanın bir bit dizisi olarak temsil edilebileceğini görmek zor olabilir, çünkü "algoritma" terimi gayri resmi terimlerle düşünülebilir. Church-Turing tezinde, algoritmanın ne olduğuna dair çok titizlikle tanımlanmış bir kavram kullanıyorlar (ve hatta o zaman kelimeler hakkında birkaç soru vardı). Bununla birlikte, terminolojileri o kadar çok etkilendi ki, bazen "algoritma" gibi kelimeler için bu tanımların o kadar etkili olduğu iddia ediliyor ki , onları tanım olarak kabul ediyoruz .

Church-Turing, her algoritmanın Turing Makinesi üzerinde bir hesaplama olarak uygulanabileceğini belirtir. Bir Turing Makinesinin açıklamasının sonlu bir değerler kümesi olduğu düşünüldüğünde, bu açıklamanın bir sayı dizisine ve daha sonra da 0 ve 1 s dizilerine nasıl eşleneceğini görmek önemsizdir.

Diğer yanıtların belirttiği gibi, ASCII kodlaması veya diğer kodlamaları kullanarak örnek algoritmanızı temsil etmek önemsizdir.

Kitabınızın bu ifadeyi bir gerçek olarak vermesinin nedeni, birçoğunun sadece bir algoritma tanımının temeli olarak Church-Turing tezini kullanması gerçeğinden kaynaklanıyor. Eğer böyle bir tanım kullanırsanız, "5 bir sayıdır" kadar açıktır çünkü temelde böyle tanımlamışsınızdır.


9
Kilise Turing tezi bir teorem değildir ve gayri resmi bir algoritma kavramının tanımını içermez. Bunun için Kilise Turing tezini başlatma gereğini de görmüyorum. Bazı nesnelerin sonlu dizgiler olarak temsil edilmesinin ve bazılarının yapamamasının "derin" nedeni, bazı kümelerin sayılabilir ve bazılarının sayılmaz olmasıdır.
quicksort

Görüyorum "Eğer makine belirtimi bileşenleri ve bir dilde dizeler kümesi arasında bir enjeksiyon belirtirseniz bir algoritma bir dize olarak kodlanabilir." OP bunu örneğinde yapar, " $ (x + 1) ^ 2 $ " ile temsil edilen makineyi alır ve iyi biçimlendirilmiş C (veya BCPL, C ++ ve diğerleri) işlevlerinin dilinde bir dize olarak temsil eder. .
Eric Towers

1
@EricTowers Church-Turing tezini gerektiriyor. Aksi takdirde, tüm algoritmalar için bir algoritmanın makine spesifikasyonu bulunduğundan emin olamazsınız.
Cort Ammon - Monica'yı yeniden

1
Bir "algoritmanın [ifade edilemeyecek kadar sınırsız sayıda sembol gerektirdiğini" ifade edemeyeceğini iddia ediyorum. Böyle bir ifade sayılamayacak kadar çok sembol kullanmalıdır, aksi takdirde daha küçük bir alt dilde ifade edilebilir. Ayrıca, sonsuz bir alfabe üzerindeki herhangi bir (saçma olmayan) ifadenin hemen hemen tüm sembollerinde sonsuz miktarda entropi vardır, bu nedenle ifadeye meydan okur (yani, bir alıcıyla gerçekten iletişim kuramaz). Tüm finitary mantık, bu sonsuz dizelerde çalışmayı reddeder ve sayılamayan dizelerde çalışmaya izin verecek sonsuz bir mantığın farkında değilim.
Eric Towers

1
Yorumlar uzun tartışmalar için değildir; bu görüşme sohbete taşındı .
DW

4

Bu ifade evrensel TM'lerin varlığına dayanmaktadır . Bunlar temelde programlanabilir TM'lerdir ve en fazla poli yükü ile başka bir TM'yi simüle edebilirler. Bu nedenle, programınız sıfır ve kod olarak girilen girdinin bir parçasıdır.


1
@Discretelizard, seni takip etmiyorum. Herhangi bir algoritma, evrensel bir TM'ye girdi olarak ifade edilebilir. Diller hesaplanabilir veya hesaplanamaz olabilir; Algoritmalar için herhangi bir standart hesaplanabilirlik kavramına aşina değilim, bu yüzden ne elde ettiğinden emin değilim. Hesaplanamayan bir algoritmaya sahip olmak ne anlama gelir? Belki de mutlaka sona ermeyen algoritmaları mı düşünüyorsunuz? Ancak evrensel bir TM hala bu algoritmaları çalıştırabilir.
DW

@Discretelizard Ben de seni takip etmiyorum. Bir Turing makinesinde çalıştırılabilir olmak esasen bir algoritmanın tanımıdır . Sanırım durma problemi için bir kehanete sahip bir Turing makinesi için bir "algoritma" hakkında konuşabilirsiniz, ancak normalde "algoritma", "Turing makinesinde yapabileceğiniz bir şey" anlamına gelir.
David Richerby

@DavidRicherby Doğru, algoritmanın gerçek tanımı daha katı, sanırım. Ancak bu soru, neden çok daha yumuşak bir kısıtlama uyguladığımızla ilgili ve bence daha güçlü bir kısıtlamanın olduğunu söylemek çok öğretici değil.
Ayrık kertenkele

4

Peki, herhangi bir kodlama için sonlu bir bit-dizesi olarak temsil edilemeyen algoritmalar hakkında konuşalım.

Sizin için böyle bir algoritma yazmama izin verin ... Ah, ama bunu yaparsam, yazdıklarımın kodlamasıyla bu algoritmayı temsil edebilirim.

Al masamdaki birkaç jetonun konumu ile algoritmamı bazı 'analog araçlar' kullanarak temsil etmeye ne dersiniz? Bu paraların pozisyonları bazı gerçek sayılarla modellenebilse de ( bazı kodlamalarda sonlu olarak temsil edilmesi imkansız olabilir ), bu açıklamanın tamamı algoritmamın bir temsili olarak kabul edilebilir ve tekrar bir bit dizgisine kodlanabilir!

Umarım bu örnekler, bazı algoritmalar sonlu bir bit-string ile temsil edilemezse, bu algoritmayı tanımlamanın hiçbir yolunun olmadığını açıkça ortaya koymaktadır!

Peki neden konuşamayacağımız bir şeyin varlığını düşünelim ki? Felsefe için belki ilginç, ama bilim için değil. Bu nedenle, algoritma kavramını, bir bit dizesiyle temsil edilebilecek şekilde tanımlarız , çünkü en azından tüm algoritmalar hakkında konuşabildiğimizi biliyoruz.


Yukarıdaki sorunun yanıtı olmasına rağmen, verilen örnekle ilgili karışıklığın çoğunlukla bir temsilin sadece bazı algoritmaları benzersiz bir şekilde temsil etmesi gerektiğinden kaynaklandığını düşünüyorum. Temsil tarzının algoritma tarafından çağrılan gerçek hesaplamaları içermesi gerekmez ! Bu çok yararlıdır, çünkü hesaplanamayan algoritmaları da temsil edebiliriz !


"Eğer bazı algoritmalar sonlu bir bit dizgisi ile temsil edilemiyorsa, bu algoritmayı hiçbir şekilde tanımlamanın bir yolu yoktur!" - Bu tam olarak doğru değil. Birisi şöyle diyebilir: "Her gerçek sayı içinr, algoritmayı düşünün birrO zaman bu algoritmaların çoğu yazılamaz ama bir şekilde hala hepsini ifade ettik.
Raphael

1
birr açıkça bu algoritmanın bir temsilidir ve temsil etmek istediğiniz tüm algoritmalar için, R,. Böylece, algoritma temsil edilebilir. Bunun yalnızca tek yönlü bir sonuç olduğunu, diğer yolun da tutmaya gerek olmadığını unutmayın.
Ayrık kertenkele


@Discretelizard için sembolleri bitecek rhızlı bir şekilde.
Raphael

@Raphael Evet, ve? Sayılamayan bir algoritma yazmanın mümkün olmaması şaşırtıcı olmamalıdır. Ve yine, yazılamayacak bazı algoritmaları "ifade ettiğinizi" iddia ediyorsunuz. "Ekspres" ile ne demek istediğinizi anlamıyorum, ama en azından temsil anlamına geliyor. Benim iddiam bir algoritmanın temsil edilmediği varsayımı ile başladığı için bunun iddiamla nasıl çeliştiğini göremiyorum.
Ayrık kertenkele

2

Bunu görmenin bir başka yolu da bilgi teorisidir. Anlamlı / yararlı bilgi / soruların tüm kodlamaları ikili 'sekanslara' dönüştürülebilir.

Much of the field goes to the question, "what is the way to ask the least average number of questions to communicate a meaningful piece of information?" In practice, this is the same as "what is the optimal approach to asking the least number of yes/no questions to understand what was communicated or said?"

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.