![]() |
|
|
![]()
|
|
| russians |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
||||
|
||||
| gustavomarginale |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 2.7.2008 Репутация: нет Всего: нет |
Опечатки бывают даже в Кнутах.
|
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Там нет никакой опечатки. russians, поймите одно, труд Кнута - жертва крупномасштабной PR-кампании. Куда ни плюнь, всюду советуют Кнута, советуют бездумно. У этого труда при всех его достоинствах есть пара недостатков:
То есть Кнут - для тех, кто всерьёз решил заниматься проектированием и анализом алгоритмов. В качестве чего-то более полезного рекомендую Н. Вирт, Алгоритмы и структуры данных. После можно почитать А. Левитин, Алгоритмы. Введение в разработку и анализ. -------------------- |
|||
|
||||
| russians |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
gustavomarginale, исключено, книга существует с 1968 года. За это время Кнут успел ввести грант за найденную ошибку в оригинале - 3000$. Но не будем отвлекаться
kemiisto, отлично, только вышеуказанная тирада тут ни к чему, ответьте на вопрос Это сообщение отредактировал(а) russians - 3.8.2010, 13:10 |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
||||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Кнут использует в качестве метода строгого обоснования понятия алгоритм метод вычислений. Вроде как он и автор этого метода. Там всё написано, собственно.
Q - множество состояний; I - множество начальных состояний; Omega - множество конечных состояний; f - функция перехода. Ниже приведён вариант формализации алгоритма Евклида. Кнут выбирает Q, I, Omega и f, так как описано в книге. Обратите внимание на слово "пусть" в начале каждого из предложений. Выбранные Кнутом множества и функция перехода - действительно формализация алгоритма Евклида. Единственный ли это способ? Не думаю, это просто пример. Это сообщение отредактировал(а) kemiisto - 3.8.2010, 14:03 -------------------- |
|||
|
||||
| russians |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
Фантом, ладно, почему в четвёртой строчке f((m, n, p, 3)) = (n, p, p, 1), а не f((m, n, r, 3)) = (n, r, r, 1)?
Мне хочется понять, откуда взялась p, в алгоритме Евклида её нет… При этом внизу он пишет, что соответствие записи и алгоритма очевидно Это сообщение отредактировал(а) russians - 3.8.2010, 14:05 |
|||
|
||||
| kemiisto |
|
||||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Разве нет?
Да ниоткуда. Просто Кнут так определил обсуждаемые множества. -------------------- |
||||
|
|||||
| russians |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
kemiisto, не думаю, что просто, ведь в третьей строчке он делает отсылку на (m, n, r, 3), на третий шаг, а на третьем шаге у нас (n, p, p, 1), и шагаем на первый шаг... то есть по логике, получается, что p - пустая ни для чего не определённая переменная, а r проскакивает?
если подразумевается, что значение r кладётся в p, так и скажите Добавлено через 7 минут и 14 секунд Всё, до меня дошло. В четвёртой строчке мы определяем, что функция делает, а в третьей применяем эту функцию, так? То есть по логике запись заканчивается на третьей строчке. Это сообщение отредактировал(а) russians - 3.8.2010, 14:18 |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Во всех четырёх строках мы даём определение функции f. Так как эта функция определена на множестве Q, мы должны дать определение для всех возможных аргументов из множества Q.
-------------------- |
|||
|
||||
| russians |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
kemiisto, ну а какие у нас могут быть возможные аргументы по исходному алгоритму? m, n, r, где
0 <= r < n |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Так, стоп. Начнём с начала. Алгоритм Евклида - нахождение НОД для двух положительных чисел. В начала текста они обозначены m и n.
Теперь формализуем этот алгоритм методом вычислений. Пусть элементами множества Q ... и далее по тексту. Во-первых, после определения множеств, m, n, p и r никакого отношения к описанному ранее не имеют. m и n - это не аргументы алгоритма Евклида, r - не остаток от деления. Это просто целые числа. Как и p. Причём m, n, p - положительные, а r - неотрицательное целое число. Теперь определим функцию перехода для каждой группы элементов множества Q:
Все определения приведены в книге. Теперь для любого элемента множества I можно найти соответсвующий элемент множества Omega, использую функцию перехода. Каждое входное значение x из множества I определяет вычисляемую последовательность x0, x1, x2, ... следующим образом x[0] = x и x[k+1] = f(x[k]) для k >= 0. Говорят, что вычисляемая последовательность заканчивается через k шагов, если k - наименьшее целое число, для которого x[k] принадлежит Omega... Пример: элемент множества I пара чисел (2, 3). Найдём соответствующий ему элемент множества Omega. Ну вот. x[0] = (3, 2). Теперь будем применять функцию f до тех пор, пока на выходе не получим элемент множества Omega. До тех пор, пока не получим просто величину (а не пару или четвёрку). k = 1: x[1] = f(x[1-1]) = f(x[0]) = f((3, 2)) = (3, 2, 0, 1) по определению функции f на первой строчке k = 2: x[2] = f(x[1]) = f((3, 2, 0, 1)) = (3, 2, 1, 2) по определению функции f на второй строчке k = 3: x[3] = f(x[2]) = f((3, 2, 1, 2)) = (3, 2, 1, 3) ... k = 4: x[4] = f(x[3]) = f((3, 2, 1, 3)) = (2, 1, 1, 1) ... k = 5: x[5] = f(x[4]) = f((2, 1, 1, 1)) = (2, 1, 0, 2) ... k = 6: x[6] = f(x[5]) = f((2, 1, 0, 2)) = 1 Всё. Приплыли. Последовательность закончилась. И Кнут прав, что соответствие между данной записью и алгоритмом Евклида очевидно. Элементами множества конченых состояний, полученными из элементов множества начальных состояний применением функции перехода как описано выше, будут значения НОД. Это сообщение отредактировал(а) kemiisto - 3.8.2010, 16:28 -------------------- |
|||
|
||||
| russians |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
k = 1: x[1] = f(x[1-1]) = f(x[0]) = f((3, 2)) = (3, 2, 0, 1) по определению функции f на первой строчке то, что описание методом вычислений верно для алгоритма евклида, мне понятно Но у меня вопрос на понимание, какую роль в указанной последовательности имеет p, зачем мы её используем и почему запись вида: f((m, n, r, 3)) = (n, r, r, 1) в четвёртой строчке - неверно? В вышеуказанном описании ответа ИМЕННО на этот вопрос я не нашёл Это сообщение отредактировал(а) russians - 3.8.2010, 16:21 |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Итак, среди членов множества Q могут встречаться 3 вида упорядоченных троек:
То есть, среди четвёрок множества Q с последним элементом равным 3 нет таких, в которых предпоследний элемент был бы равен нулю. Поэтому нельзя использовать для обозначения этого элемента символ r (ведь r >= 0). -------------------- |
|||
|
||||
| russians |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 297 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
Всё, теперь понятна необходимость использования
Это сообщение отредактировал(а) russians - 3.8.2010, 16:37 |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |