Kardynalność zbioru algorytmów

15

Ktoś w dyskusji przywołał, że (uważa) może istnieć co najmniej ciągła liczba strategii podejścia do określonego problemu. Specyficznym problemem były strategie handlowe (nie algorytmy, ale strategie), ale myślę, że to nie ma znaczenia dla mojego pytania.

To sprawiło, że pomyślałem o liczności zbioru algorytmów. Trochę szukałem, ale nic nie wymyśliłem. Myślałem, że ponieważ maszyny Turinga działają ze skończonym zestawem alfabetów, a taśma musi być indeksowalna, a zatem policzalna, niemożliwe jest posiadanie niezliczonej liczby algorytmów. Moja teoria zbiorów jest wprawdzie zardzewiała, więc nie jestem wcale pewien, czy moje rozumowanie jest prawidłowe i prawdopodobnie nie byłbym w stanie tego udowodnić, ale to ciekawa myśl.

Jaka jest liczność zbioru algorytmów?

qwe2
źródło
1
Jak wspomniał Yuval Filmus, istnieje niezliczona ilość maszyn Turinga. Ale istnieje kontinuum wiele niejednorodnych rodzin obwodów boolowskich, ponieważ mogą one obliczyć dowolną funkcję o wartości logicznej. Ale prawdopodobnie nie to rozumiesz przez „algorytm”.
Przywróć Monikę

Odpowiedzi:

28

Algorytm jest nieformalnie opisany jako skończona sekwencja pisemnych instrukcji wykonania określonego zadania. Mówiąc bardziej formalnie, są one identyfikowane jako maszyny Turinga, choć równie dobrze można je opisać jako programy komputerowe.

Dokładny formalizm, którego używasz, nie ma większego znaczenia, ale podstawową kwestią jest to, że każdy algorytm można zapisać jako skończoną sekwencję znaków, przy czym znaki są wybierane z pewnego zbioru skończonego, np. Liter rzymskich, ASCII lub zer i jedynek. Dla uproszczenia załóżmy, że zera i jedynki. Każda sekwencja zer i jedynek jest po prostu liczbą naturalną zapisaną dwójkowo. Oznacza to, że istnieje co najwyżej policzalna nieskończoność algorytmów, ponieważ każdy algorytm może być reprezentowany jako liczba naturalna.

Aby uzyskać pełne uznanie, należy się martwić, że niektóre liczby naturalne mogą nie kodować prawidłowych programów, więc algorytmów może być mniej niż liczb naturalnych. (Dla kredytu bonusowego, możesz też się zastanawiać, czy to możliwe, że dwie różne liczby naturalne reprezentują ten sam algorytm). Jednak print 1, print 2, print 3i tak dalej są wszystkie algorytmy i wszystko inne, tak istnieją co najmniej przeliczalnie nieskończenie wiele algorytmów.

Dochodzimy zatem do wniosku, że zestaw algorytmów jest w nieskończoność nieskończony.

David Richerby
źródło
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Gilles „SO - przestań być zły”
10

Zestaw algorytmów jest nieskończenie nieskończony. Dzieje się tak, ponieważ każdy algorytm ma skończony opis, na przykład maszynę Turinga.

Fakt, że algorytm ma skończony opis, pozwala nam wprowadzić jeden algorytm do drugiego, i to jest podstawa teorii obliczalności. Pozwala nam na przykład sformułować problem zatrzymania.

Yuval Filmus
źródło
7

przynajmniej ciągła liczba strategii podejścia do określonego problemu

„Continuum” prawdopodobnie ma oznaczać liczby rzeczywiste… użycie „co najmniej” razem z tym słowem jest absurdalnie przesadzone. Mówiąc trochę głupio: niezliczona nieskończoność jest dość duża, ale niezliczona nieskończoność jest ... większa niż duża. O wiele bardziej. Niezgłębione.

Wyrzućmy to przez okno. Aby zobaczyć, z jaką nieskończonością mamy do czynienia, jest śmiertelnie prosta (i intuicyjna, nawet jeśli twój przyjaciel nigdy nie słyszał o teoretycznych informatykach):

  • Dowolny algorytm może być zaimplementowany w dowolnym języku kompletnym; wybierz swoją ulubioną truciznę języków rzeczywistych (Java, C, ...), aby nieco to zdezkrypować. Wszystko to jest równoważne z teoretycznym zestawem algorytmów, które każdy mógłby kiedykolwiek wymyślić. Zauważ, że każdy algorytm sam w sobie jest skończony, tzn. Nie ma algorytmów, których zapisanie wymagałoby nieskończenie wielu symboli.
  • Nie myśl o skomplikowanych maszynach Turinga. Twój wybrany język używa prostych plików do przechowywania kodu źródłowego. Każdy plik jest zbiorem małych liczb (aka, bajtów). Ważne jest to, że te liczby są zdecydowanie liczbami całkowitymi, a nie ciągłymi. (Jeśli jesteś purystą i chcesz pozostać w reżimie teoretycznym, zamień słowo „bajt” na „symbol”, nic to nie zmieni.) Jeśli boisz się dużych programów, które są rozproszone w wielu plikach (i bibliotekach) i inne rzeczy), a następnie spakuj je do jednego skompresowanego archiwum (tj. jednego pliku).
  • Teraz możesz przypisać pojedynczą liczbę całkowitą do każdego pliku tam, biotycznie. Po prostu zapisujemy cały bałagan bitów / bajtów pliku, jeden po drugim, i otrzymujemy bardzo dużą liczbę wyrażoną w formacie binarnym. W odległej przeszłości ludzie faktycznie to robili: drukowali skompilowane programy binarne jako długie listy liczb szesnastkowych w czasopismach; wpisujesz je, ale nigdy nie widzisz ich jako nic innego niż liczby (często pogrupowane w zestawy 8- lub 16-cyfrowe, aby ułatwić pisanie).
  • Tak więc: każdy program może być reprezentowany przez liczbę całkowitą, choć dowolną dużą. Odwrotna metoda również działa - każda liczba całkowita może być natychmiast i trywialnie przeniesiona do pliku i wyrzucona do kompilatora (oczywiście tylko niewielka część z nich będzie poprawnymi programami, ale teraz nie ma to dla nas znaczenia).
  • Ostatecznie programy, a tym samym algorytmy, są podzbiorem liczb całkowitych; stąd tylko licznie wiele może istnieć.
  • NB, fakt, że istnieje wiele różnych implementacji jednego algorytmu, jest na naszą korzyść, to znaczy wiele z tych liczb całkowitych zagęszcza się w (różnych reprezentacjach) tego samego algorytmu. Więc jeśli policzalna nieskończoność nie była już najmniejszą nieskończonością, musielibyśmy się martwić, że liczba algorytmów będzie jeszcze mniejsza, ale na pewno nie większa (tj. Niepoliczalna).

Specyficznym problemem były strategie handlowe (nie algorytmy, ale strategie)

Nie wiem, co oznacza twój przyjaciel z „strategią”; Zakładam, że ma na myśli coś, co przypomina algorytm, ale nie jest wystarczająco sformułowane wystarczająco szczegółowo, aby włamać się do komputera? Czy które w jakiś sposób zależy od ludzkiej „intuicji” podczas egzekucji? Jeśli tak, to są to tylko nieistotne szczegóły. Ludzkość nie znalazła jeszcze żadnego opisu procesów, który byłby silniejszy lub większy niż „algorytmy” w takim sensie, jakiego używamy w CS.

AnoE
źródło
3
Re: „Continuum” prawdopodobnie ma oznaczać liczby rzeczywiste… użycie „co najmniej” razem z tym słowem jest absurdalnie przesadne ”: Nie ma w tym nic„ ponad szczytem ”, nie mówiąc już o„ absurdalnym ”, więc . Istnieje więcej zestawów liczb rzeczywistych niż liczb rzeczywistych, więc normalne jest mówienie o zestawach większych niż kontinuum.
ruakh
6

Patrz Gödel Numbering . Podstawowym faktem w informatyce jest to, że algorytmy są policzalne, podobnie jak zestawy rekurencyjnie policzalne.

Algorytmy są policzalne, łatwo jest wykazać, że nie istnieje algorytm weryfikujący każdy zestaw w systemie formalnym (przypisując wartość prawdy do problemu). Byłoby to równoznaczne z przypisaniem algorytmu do każdej funkcji mapującej zestaw problemów na wartości boolowskie. Zbiór tych funkcji jest jednak niepoliczalny (trywialnie tej samej liczności co zbiór mocy zestawu problemów, a zatem niepoliczalny).

Mam nadzieję, że daje to pewną intuicję, dlaczego algorytmy muszą być „mniej wydajne” niż jakakolwiek funkcja, a więc policzalne (zignorujmy tutaj hipotezę kontinuum).

drilow
źródło
2

Jeśli nie zaczniesz od wymogu, że strategia musi być możliwa do implementacji za pomocą algorytmu i zignoruje rzeczywiste efekty dyskretyzacji, możesz na przykład zaakceptować następujące parametry jako sparametryzowaną strategię handlową:

abab

ab

Arno
źródło
0

Jeśli wyobrażamy sobie algorytmy jako programy komputerowe zapisane w formacie binarnym *, wówczas liczba algorytmów jest liczbą (liczb całkowitych) liczb binarnych. Zatem liczność algorytmów jest licznością liczb całkowitych.

* Dowód, że maszyny Turinga mogą uruchamiać wszystkie algorytmy i że komputery mogą uruchamiać dowolne maszyny Turinga, uczyniłoby tę odpowiedź niepotrzebnie długą. Ten pierwszy może zależeć od definicji algorytmu, ale nie sądzę, że używasz niezliczonych strategii handlowych.

użytkownik558317
źródło
1
Co to dodaje do istniejących odpowiedzi?
David Richerby
„Dowód, że maszyny Turinga mogą uruchamiać wszystkie algorytmy ... sprawiłoby, że ta odpowiedź byłaby niepotrzebnie długa”. Uniemożliwiłoby to odpowiedź, ponieważ tak naprawdę nie można udowodnić tezy
John Coleman
@DavidRicherby Dodaje zwięzłość.
user558317,
1
@JohnColeman Stwierdzenie niemożności dowodu bez dowodu? Miałem na myśli, że a) OP prawdopodobnie nie będzie się tym przejmował, ponieważ b) jest to kwestia definicji. Pytanie wydaje się zawierać założenie: „ponieważ maszyny Turinga pracują ze skończonym zestawem alfabetów, a taśma musi być indeksowalna, a zatem policzalna, nie można mieć niepoliczalnej liczby algorytmów”.
user558317,
0

Inne odpowiedzi już wyjaśniły, że w standardowym modelu obliczeń (maszyny Turinga, rachunek lambda itp.) Zbiór algorytmów jest w nieskończoność nieskończony.

Istnieją jednak inne teoretyczne modele obliczeń, w których zbiór algorytmów jest niepoliczalnie nieskończony. Na przykład maszyny Blum – Shub – Smale mają niepoliczalnie nieskończony zestaw instrukcji 1 , więc ich zestaw algorytmów jest również nieskończenie nieskończony.


1 Mówiąc ściślej, sam zestaw instrukcji jest skończony, ale jest parametryzowany przy użyciu niezliczonych zbiorów nieskończonych (funkcje wymierne).

Florian Brucker
źródło
Czy funkcje racjonalne nie są policzalne?
Ben Millwood
@BenMillwood Czy możesz krótko naszkicować dowód, dlaczego tak się dzieje?
Mark C
@BenMillwood Dla każdego x0R, stała funkcja fa:xx0jest funkcją racjonalną.
Florian Brucker
Och, zakładałem, że stałe również muszą być racjonalne. Nieważne więc.
Ben Millwood,
-1

ponieważ maszyny Turinga działają ze skończonym zestawem alfabetu, a taśma musi być indeksowalna, a zatem policzalna

Biorąc pod uwagę konkretny rozmiar, istnieje ostatecznie wiele maszyn Turinga i istnieje niezliczona ilość rozmiarów. Zliczalny zestaw liczb, o ile są skończone, można policzyć. Rozmiar alfabetu jest czynnikiem wpływającym na liczbę maszyn Turinga, ale rozmiar taśmy nie. Gdyby pozwolono, aby alfabet miał licznie wiele znaków, wówczas istniałoby niepoliczalnie wiele maszyn (każda liczba rzeczywista mogłaby być zakodowana jako sekwencja symboli).

Jeśli „algorytm” oznacza jedynie zgodność między danymi wejściowymi i wyjściowymi, a nie maszynę Turinga lub w inny sposób coś, co jest normalnym sensem „obliczeń”, to oczywiście, jeśli istnieje niezliczona ilość różnych danych wejściowych, wówczas istnieje niezliczona ilość algorytmów: dla dla każdej liczby rzeczywistej moglibyśmy zdefiniować „algorytm”, który przyjmuje liczbę naturalną jako dane wejściowe i generuje to miejsce po przecinku. Na przykład, wpisując „3” do.5algorytm dałby wynik „7”. (Należy pamiętać, że chociaż możliwe jest zaprojektowanie maszyny Turinga, która daje n-tą cyfrę.5nie można tego zrobić dla wszystkich liczb rzeczywistych; tylko policzalnie wiele liczb rzeczywistych jest obliczalnych).

Akumulacja
źródło
Nie rozumiem, co próbujesz tutaj zrobić. Pytanie dotyczy liczby algorytmów, a algorytmem jest maszyna Turinga, a nie dane wejściowe. Umożliwienie nieskończenie wielu niepustych znaków na taśmie na początku nie wpłynęłoby na liczbę algorytmów, a w każdym przypadku każdy bieg kończący byłby w stanie odczytać tylko skończony prefiks wejścia. Tymczasem twój drugi akapit myli algorytmy z funkcjami matematycznymi. Dla wszystkich, ale licznie liczących się reali, nie ma algorytmu, który mógłby ci to powiedziećncyfra w rozwinięciu dziesiętnym.
David Richerby
A co by to znaczyło mieć niezliczoną liczbę algorytmów? Możesz zapisać tylko licznie. W jakim sensie jest coś, czego nie można zapisać algorytmu?
David Richerby
@DavidRicherby Tak, pomieszałem kilka rzeczy. Ale można użyć „algorytmu” w ogólnym znaczeniu, aby odnieść się do sekwencji wyborów. I w tym sensie wybranie cyfry na podstawie danych wejściowych jest „algorytmem”, choć nie do obliczenia.
Akumulacja
W informatyce „algorytm” i „obliczalny” to to samo. Algorytm jest maszyną Turinga.
David Richerby