Кардинальність набору алгоритмів


15

Хтось із обговорень підкреслив, що (він вважає) може бути хоча б безперервна кількість стратегій для вирішення конкретної проблеми. Конкретною проблемою були торгові стратегії (не алгоритми, а стратегії), але я думаю, що це поруч із моїм питанням.

Це змусило мене замислитись про кардинальність набору алгоритмів. Я трохи обшукував, але нічого не придумав. Я думав, що, оскільки машини для тюрінгу працюють з кінцевим набором алфавіту, і стрічка повинна бути індексуватися таким чином, підрахувати, неможливо мати незліченну кількість алгоритмів. Моя теорія наборів істинно іржава, тому я зовсім не впевнений, що мої міркування справедливі, і я, мабуть, не зміг би цього довести, але це цікава думка.

У чому полягає кардинальність набору алгоритмів?


1
Як згадував Юваль Філіус, існує чимало машин Тюрінга. Але є безперервне безліч нерівномірних родин булевих схем, оскільки вони можуть обчислити будь-яку функцію булевого значення. Але це, мабуть, не те, що ви мали на увазі під "алгоритмом".
Відновіть Моніку

Відповіді:


28

Алгоритм неофіційно описується як кінцева послідовність письмових інструкцій для виконання певного завдання. Більш формально вони ідентифікуються як машини Тьюрінга, хоча ви можете однаково добре їх описати як комп'ютерні програми.

Точний формалізм, який ви використовуєте, не має великого значення, але основним моментом є те, що кожен алгоритм може бути записаний у вигляді кінцевої послідовності символів, де символи вибираються з якогось кінцевого набору, наприклад, римських букв, ASCII або нулів і одиниць. Для простоти припустимо нулі та одиниці. Будь-яка послідовність нулів і одиниць - це лише натуральне число, записане у двійковій формі. Це означає, що існує щонайменше незліченна нескінченність алгоритмів, оскільки кожен алгоритм може бути представлений як натуральне число.

Щоб отримати повний кредит, ви повинні турбуватися, що деякі натуральні числа можуть не кодувати дійсні програми, тому алгоритмів може бути менше, ніж натуральних чисел. (Для отримання бонусу кредиту, ви можете також бути цікаво , якщо це можливо , що дві різні натуральні числа , представляють один і той же алгоритм.) Однак print 1, print 2, print 3і так далі, всі алгоритми і всі різні, так що, по крайней мере лічильно нескінченно багато алгоритмів.

Отже ми робимо висновок, що набір алгоритмів помітно нескінченний.


Коментарі не для розширеного обговорення; ця розмова була переміщена до чату .
Жил "ТАК - перестань бути злим"

10

Набір алгоритмів незмінно нескінченний. Це тому, що кожен алгоритм має кінцевий опис, скажімо, як машина Тьюрінга.

Той факт, що алгоритм має кінцевий опис, дозволяє нам вводити один алгоритм в інший, і це є основою теорії обчислюваності. Це дозволяє нам сформулювати, наприклад, проблему зупинки.


7

принаймні безперервна кількість стратегій для вирішення конкретної проблеми

"Континуум", ймовірно, повинен означати реальні числа ... використання "принаймні" разом із цим словом є абсурдно вгорі. Щоб бути трохи язиком у роті: незліченно нескінченна досить велика, але незліченна нескінченна ... більша, ніж велика. Набагато більше. Беззмістовно.

Тож давайте викинемо це у вікно. Щоб побачити, з якою нескінченністю ми маємо справу, є мертвою просто (і інтуїтивно зрозуміло, навіть якщо ваш друг ніколи не чув про жодну теоретичну інформатику):

  • Будь-який алгоритм може бути реалізований з будь-якою повноцінною мовою; виберіть улюблену отруту мов реального світу (Java, C, ...), щоб трохи дефістифікувати це. Все це еквівалентно теоретичному набору алгоритмів, з якими хто-небудь міг придумати. Зауважимо, що кожен алгоритм сам по собі є кінцевим, тобто немає алгоритмів, які мали б записувати нескінченно багато символів.
  • Не думайте про складні машини Тюрінга. Ваша мова, що вибирається, використовує прості файли для зберігання вихідного коду. Кожен файл - це сукупність невеликих чисел (ака, байтів). Важливо те, що ці числа, безумовно, цілі, а не безперервні. (Якщо ви пурист і хочете залишитися в теоретичному режимі, замініть слово "байт" на "символ", це нічого не змінить.) Якщо ви боїтесь великих програм, які розподіляються по декількох файлах (і бібліотеках та інші речі), а потім просто зафіксуйте їх в єдиний стислий архів (тобто один файл).
  • Тепер ви можете призначити одне ціле число кожному файлу там, бієктивно. Ми просто записуємо один за іншим весь біт / байт файлу і в кінцевому підсумку з величезною кількістю, вираженою у двійковій формі. У далекому минулому люди насправді так робили: друкували складені двійкові програми як довгі списки шістнадцяткових номерів у журналах; Ви вводите їх, але ніколи не сприймайте їх як нічого, ніж числа (часто групуйте зручно в 8- або 16-значні набори, щоб полегшити введення тексту).
  • Отже: кожна програма може бути представлена ​​цілим числом, нехай і довільно великим. Інший спосіб працює також: кожне ціле число можна негайно і тривіально перенести у файл і перекинути на компілятор (очевидно, лише невелика частина цих буде дійсними програмами, але це для нас зараз не має значення).
  • Зрештою, програми, а отже алгоритми, є підмножиною цілих чисел; отже, існує лише багато
  • Зверніть увагу: той факт, що існує багато різних реалізацій одного алгоритму, йде на нашу користь, тобто багато з цілих чисел конденсуються в (різні представлення) одного і того ж алгоритму. Тож якби лічильна нескінченність не була найменшим видом нескінченності, нам би довелося турбуватися про те, щоб кількість алгоритмів була ще меншою, але, безумовно, не більшою (тобто незлічною).

Конкретною проблемою були торгові стратегії (не алгоритми, а стратегії)

Я не знаю, що означає твій друг під "стратегією"; Я припускаю, що він означає щось подібне до алгоритму, але не досить сформульоване досить детально, щоб зламати його в комп'ютер? Або що якось залежить від людської "інтуїції" під час виконання? Якщо так, то це лише неістотні деталі. Людство ще не знайшло жодного опису процесів, які є більш потужними або більшими, ніж "алгоритми" в тому сенсі, який ми використовуємо в CS.


3
Re: "" Континуум ", ймовірно, повинен означати реальні числа ... використання" принаймні "разом із цим словом є абсурдно над вершиною": немає нічого "над верхом" про це, не кажучи вже про "абсурдно", так . Існує більше наборів реальних чисел, ніж справжніх чисел, тому цілком нормально говорити про множини, що перевищують континуум.
ruakh

6

Див. Нумерацію Геделя , основним фактом в інформатиці є те, що алгоритми можна підрахувати, як і розширення, рекурсивно перелічуючи безліч.

Під час обліку алгоритмів легко показати, що не існує алгоритму для перевірки кожного набору в офіційній системі (присвоєння значення істинності проблемі). Це було б рівнозначно призначенню алгоритму кожної функції, яка відображає набір проблем булевих значень. Набір цих функцій, однак, незліченний (тривіально така ж кардинальність, як і набір потужності набору проблем, тому незліченний).

Я сподіваюся, що це дає певну інтуїцію щодо того, чому алгоритми повинні бути "менш потужними", ніж будь-яка функція, таким чином, підрахункова (давайте ігнорувати тут гіпотезу про континуум).


2

Якщо не починати з вимоги, що стратегію потрібно реалізовувати за допомогою алгоритму, і ігнорує ефекти дискретизації в реальному житті, можна, наприклад, прийняти таке як параметризовану торгову стратегію:

abab .

aб


0

Якщо ми мислимо алгоритми як комп'ютерні програми, записані у двійковій *, то кількість алгоритмів - це кількість (цілих) двійкових чисел. Таким чином, кардинальність алгоритмів - це кардинальність цілих чисел.

* Доказ того, що тюрінг-верстати можуть запускати всі алгоритми, і що комп'ютери можуть запускати будь-які машини, що займаються програмою, зробив би цю відповідь зайвим довгим. Перший може залежати від визначення алгоритму, але я не думаю, що ви використовуєте нечіткі стратегії торгівлі.


1
Що це додає до існуючих відповідей?
Девід Річербі,

"Доказ того, що тюрінг-машини можуть запускати всі алгоритми ... зробив би цю відповідь зайвою довгою". Це зробило б неможливою відповідь, оскільки ви не можете реально довести тезу Церкви Тюрінга
Джон Коулман

@DavidRicherby Це додає стислості.
користувач558317

1
@JohnColeman Стверджуючи неможливість доказування, без доказу? Я мав на увазі, що а) ОП, мабуть, не хвилює, оскільки б) це питання визначення. Здається, питання містить припущення: "оскільки машини для тюрінгу працюють з кінцевим набором алфавіту, і стрічка повинна бути індексуватися таким чином, підрахувати, неможливо мати незліченну кількість алгоритмів".
користувач558317

0

Інші відповіді вже пояснювали, що в стандартній моделі обчислень (машини Тюрінга, обчислення лямбда та ін.) Набір алгоритмів помітно нескінченний.

Однак є й інші теоретичні моделі обчислення, в яких безліч нескінченних безлічі алгоритмів. Наприклад, машини Blum – Shub – Smale мають незліченно безмежний набір інструкцій 1 , тому їх набір алгоритмів також незліченно нескінченний.


1 Якщо бути точним, сам набір інструкцій є кінцевим, але він параметризований за допомогою незліченного безмежного набору (раціональних функцій).


Чи не враховуються раціональні функції?
Бен Мілвуд

@BenMillwood Чи можете ви коротко ескіз докази того , чому це може бути справа?
Марк C

@BenMillwood Для кожного х0R, постійна функція f:хх0є раціональною функцією.
Флоріан Брюкер

О, я припускав, що константи також повинні бути раціональними. Неважливо, тоді.
Бен Міллвуд

-1

оскільки машини для тюрінгу працюють з кінцевим набором алфавіту, і стрічка повинна бути індексується, таким чином, підраховуватися

Враховуючи певний розмір, існує кінцево багато машин Тюрінга, і їх розміри незліченно багато. Лічильний набір чисел, до тих пір, які є кінцевими, можна зарахувати. Розмір алфавіту є фактором кількості машин Тьюрінга, але розмір стрічки не відповідає. Якби в алфавіті можна було мати чимало символів, тоді машин було б незліченно багато (кожне дійсне число могло бути закодовано як послідовність символів).

Якщо "алгоритм" ви просто маєте на увазі відповідність між входом і виходом, а не машиною Тюрінга чи іншим чином, що є нормальним почуттям "обчислення", то, очевидно, якщо існує чимало різних входів, то існує незліченна кількість алгоритмів: кожне дійсне число, ми могли б визначити "алгоритм", який приймає натуральне число як вхідний, і виводить це десятковий знак. Наприклад, надання вводу "3" в.5алгоритм дав би вихід "7". (Зверніть увагу, що поки можна створити машину Тюрінга, яка дає n-й розряд.5, це неможливо зробити для всіх реальних чисел; підрахувати лише багато реальних чисел).


Я не розумію, що ти тут намагаєшся зробити. Питання полягає в кількості алгоритмів, а алгоритм - це машина Тьюрінга, а не вхід. Дозвіл нескінченно багатьох непорожніх символів на стрічці на початку не вплине на кількість алгоритмів і, у будь-якому випадку, будь-який закінчуючий запуск зможе прочитати лише кінцевий префікс введення. Тим часом ваш другий абзац плутає алгоритми з математичними функціями. Для всіх, окрім як і для багатьох справ, не існує алгоритму, який би міг вам сказатин-я цифра в десятковому розширенні.
Девід Річербі

І що б це означало мати незліченну кількість алгоритмів? Записати можна лише багато. У якому сенсі це те, що ви не можете записати алгоритм?
Девід Річербі

@DavidRicherby Так, я змішав кілька речей. Але можна використовувати "алгоритм" у загальному розумінні для позначення послідовності вибору. І в цьому сенсі вибір цифри на основі вхідного сигналу - це "алгоритм", хоч і не обчислюваний.
Накопичення

В інформатиці "алгоритм" і "обчислюваність" - це одне і те ж. Алгоритм - це машина Тьюрінга.
Девід Річербі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.