Чи мають "індуктивно" та "рекурсивно" дуже подібні значення?


11

Чи означають "індуктивно" та "рекурсивно" дуже подібні?

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


У цій статті про індукцію та рекурсію це добре узагальнено, але суть у тому, що вони тісно пов'язані; доказ математичної індукції може бути записаний у вигляді рекурсивного алгоритму.
Мербс

Індуктивно зазвичай рекурсивно означає від до , тому рекурсивно є більш загальним прислівником. n + 1nn+1
Yuval Filmus

Що таке рекурсивно не індуктивно, @YuvalFilmus?
Тім

@YuvalFilmus: Це дуже обмежене поняття індуктивне.
Дейв Кларк

Для мене вони означають те ж саме поза контекстом. У конкретному контексті вони можуть означати різні речі.
Жил 'ТАК - перестань бути злим'

Відповіді:


6

Ні , але не з тих причин, які наводили інші люди. Різниця між рекурсією та індукцією полягає не в тому, що рекурсія "зверху вниз", а індукція - "знизу вгору". Індукція ізоморфна тому, що називається "первісною рекурсією", але, загалом, рекурсія суворо потужніша за індукцію .

Відмінність "зверху вниз" і "знизу вгору" є тривіальною - будь-яка примітивна рекурсивна програма "зверху вниз" може бути механічно перетворена на щось "знизу вгору". Насправді будь-який доказ за допомогою індукції можна перетворити на рекурсивну програму. У рамках обчислення індуктивних конструкцій, якщо ви хочете довести, що кожне натуральне число є фропульозним, ви записуєте це як функцію, яка будує доказ того, що n froopulous, роблячи рекурсивний виклик, щоб побудувати доказ того, що 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. Дивіться подібне запитання у нашому відділі сестри з математики " Рекурсивне та індуктивне визначення" . Я цитую відповідь Карла Маммерта:

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

Але ще важливіше:

втрачати сон не варто


так "рекурсія = розділити і перемогти", що спочатку зверху вниз, а потім знизу вгору?
Тім

1

Ні, вони не однакові. І ви маєте рацію (я припускаю, що алгоритм ви описуєте): це рекурсивно.

Причиною є визначення обох слів, які ви можете прочитати у словнику чи Вікіпедії.

Індукція (припускаючи, що "математична індукція") полягає саме в тому, щоб довести, що всі випадки аргументу вірні.

Рекурсія стосується конкретно процесу, який може бути повторений певним чином у межах одного процесу.

RE: відповіді інших людей:

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


Індукція стосується не лише доказів. Ви також весь цей час використовуєте його для індуктивного визначення рекурсивних структур (структури даних, мови тощо)
hugomg

@missingno Укажіть джерело для цього визначення.
Том

Один із прикладів, про який я міг би придумати, ось такий : "Мова \ mathcal {L}, також відомий як його набір формул, добре сформованих формул або wff, індуктивно визначається такими правилами:"
hugomg

@missingno, що веде до цієї сторінки Вікіпедії, де я вважаю, що слово "спонукальний" є зайвим і заплутаним, воно в основному використовується як "рекурсивний"
Том

Будь ласка, не змушуйте мене шукати ще більше прикладів. Незважаючи на те, що ви можете не погодитися з цим, це, безумовно, дуже поширена ідіома, і ви можете знайти її у багатьох книгах, якщо шукаєте її. І це не так, як хтось спеціально редагував статтю wikipedia, щоб довести свою думку ...
hugomg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.