Имеют ли «индуктивно» и «рекурсивно» очень похожие значения?


11

Означают ли «индуктивно» и «рекурсивно» очень похожие?

Например, если есть алгоритм, который определяет n-dim вектор путем определения его первых k + 1 компонентов на основе определения его первых k компонентов и инициализируется с первым компонентом, вы бы назвали его работающим рекурсивно или индуктивно? Я использовал «рекурсивно», но сегодня кто-то сказал это «индуктивно».


Эта статья об индукции и рекурсии суммирует это красиво, но суть в том, что они тесно связаны; математическое доказательство индукции может быть записано как рекурсивный алгоритм.
Merbs

Индуктивно обычно означает рекурсивно от до , поэтому рекурсивно - это более общее наречие. n + 1nn+1
Юваль Фильмус

Какой тип рекурсивно не индуктивно, @YuvalFilmus?
Тим

@YuvalFilmus: Это очень ограниченное понятие индуктивности.
Дэйв Кларк,

Для меня они означают одно и то же вне контекста. В определенном контексте они могут означать разные вещи.
Жиль "ТАК - перестать быть злым"

Ответы:


6

Нет , но не по причинам, которые дали другие люди. Разница между рекурсией и индукцией не в том, что рекурсия «сверху вниз», а в индукции «снизу вверх». Индукция изоморфна чему-то, что называется «первичной рекурсией», но, в общем, рекурсия строго сильнее, чем индукция .

Различие между сверху вниз и снизу вверх тривиально - любая примитивная рекурсивная программа «сверху вниз» может быть механически преобразована в нечто «снизу вверх». Фактически любое доказательство по индукции можно превратить в рекурсивную программу. В рамках исчисления индуктивных конструкций, если вы хотите доказать, что каждое натуральное число является ненастоящим, вы бы записали его как функцию, которая создает доказательство того, что n является ненастоящим, выполняя рекурсивный вызов для создания доказательства того, что n- 1 обманчиво

Ключевым фактором индукции является то, что вещи определяются в терминах более мелких вещей, и они «достигают дна» после конечного числа шагов. Натуральные числа являются индуктивными, потому что каждый натуральный является либо 0, либо преемником меньшего натурального. Списки являются индуктивными, поскольку каждый список либо пуст, либо может быть разбит («развернут») на элемент и меньший список.

Иногда рекурсивные программы не пишутся с точки зрения меньших вещей, хотя. Например, возьмите эту функцию Collatz:

fun collatz(n) 
   if n <= 1
      return 0;
   else if n % 2 == 0
     return 1 + collatz(n / 2)
   else
     return 1 + collatz(3 * n + 1)
end

Эта функция не работает ни сверху вниз, ни снизу вверх и поэтому не является индуктивной по отношению к натуральным числам.

Там может быть приказ относиться к этому индуктивно, но для большинства вещей просто нет пути. Функции над бесконечными потоками - отличный пример. На самом деле, потоки являются прототипом примера «коиндуктивного» типа.

«Практические основы языков программирования» Боба Харпера, доступные бесплатно онлайн, имеют хорошее введение в индуктивный, коиндуктивный и рекурсивный типы.


2

Для меня это в основном вопрос точки зрения. Если я определяю объекты на основе меньшего, я делаю это индуктивно, так что это снизу вверх. Если я решаю проблему, разбивая ее на более мелкие части, которые решаются таким же образом, я называю это рекурсией, то есть сверху вниз.

(редактировать) PS. Смотрите аналогичный вопрос в нашем отделении по математике: рекурсивное или индуктивное определение . Я цитирую из ответа Карла Маммерта:

Мое лучшее описание состоит в том, что «индуктивное определение» более распространено, когда мы определяем набор объектов «из ничего», в то время как «рекурсивное определение» более распространено, когда мы определяем функцию в уже существующей коллекции объектов.

Но что более важно:

не стоит терять сон


так «рекурсия = разделяй и властвуй», который первым сверху вниз , а затем снизу вверх?
Tim

1

Нет, они не то же самое. И вы правы (я предполагаю, что об алгоритме вы описываете): это рекурсивное.

Причиной является определение обоих слов, которые вы можете прочитать в словаре или википедии.

Индукция (в предположении «математической индукции») специально предназначена для доказательства того, что все случаи аргумента верны.

Рекурсия, в частности, касается процесса, который, возможно, повторяется каким-то образом в рамках того же процесса.

RE: ответы других людей:

Посмотрев ответы других людей, я могу понять, почему возникает путаница: при определении структур данных, функций и языков некоторые теоретики, кажется, используют «индуктивный» и «рекурсивный» в замешательстве (см. Комментарии к этому вопросу). Я не думаю, что ответ Коппеля (даже с текущими самыми высокими голосами) действительно отражает эту путаницу. Поскольку мы говорим об алгоритме, я бы не сказал, что существуют «индуктивные алгоритмы»; Я думаю, что это ненужная категоризация.


Индукция не только о доказательствах. Вы также все время используете его для индуктивного определения рекурсивных структур (структур данных, языков и т. Д.)
hugomg

@missingno Пожалуйста, предоставьте источник для этого определения.
Том

Один пример, который я мог бы вспомнить, здесь : «Язык \ mathcal {L}, также известный как набор формул, правильно сформированных формул или wffs, индуктивно определяется следующими правилами:»
hugomg

@missingno, который ведет на эту страницу в Википедии, где, как мне кажется, существует избыточное и запутанное использование слова «индуктивный», по сути, используемого как «рекурсивный»
Том

Пожалуйста, не заставляйте меня искать еще больше примеров. Даже если вы не согласны с этим, это определенно очень распространенная идиома, и вы можете найти ее во многих книгах, если посмотрите на нее. И его не так, как кто - то редактировал википедии статью с целью доказать свою точку зрения ...
hugomg
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.