DRAKON.SU
https://forum.drakon.su/

Базовые компьютерные алгоритмы
https://forum.drakon.su/viewtopic.php?f=78&t=6124
Страница 4 из 5

Автор:  LKom [ Четверг, 15 Февраль, 2018 10:25 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Изображение

Olegar, более существенное замечание:

к иконе Заголовок необходимо присоединить икону Параметры. Параметры, возможно, обязательный атрибут рекурсивной функции.
К иконе Вставка так же надо присоединить икону Параметры.

Потом, странный у Вас алгоритм! В алгоритме нигде не видно вычисления и присваивания значений переменным a1, b1.

Автор:  Olegar [ Пятница, 16 Февраль, 2018 01:38 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Владимир Данилович, спасибо, сделал стрелку вызова обходной.

LKom, спасибо за замечания.
Постарался усилить аспект данных и повысить понятность: https://www.youtube.com/watch?v=tgo0cUoaAV0
Aргументы и их значения показаны в контейнере Arguments. Возможно, икона Параметры тоже бы неплохо смотрелась.

Из википедии эти картинки убрали с аргументом: "Adds nothing useful: a reader who may have difficulty with the text in the body would not be helped by these flow charts."
Перевод: "Не добавляет ничего полезного: читателю, который не понял, что написано в статье википедии, эти флоучарты не помогут."

Вложения:
euclidrec OG 20180215.gif
euclidrec OG 20180215.gif [ 1.46 МБ | Просмотров: 11201 ]

Автор:  Владимир Невзоров [ Воскресенье, 18 Февраль, 2018 20:46 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Рекурсию ясно только анимацией можно показать?

Как же быть, если ответ "да"?
Я хотел дальше и сортировку слиянием показывать и другие вещи.
Что получается - отказываться от рекурсивной версии реализации, потому что стандартными методами в ДРАКОН схеме, презентующей рекурсию можно быстро запутаться?

Неужели моя идея в легком понимании алгоритмов с помощью ДРАКОН схем терпит крах?
Я пока не знаю как быть.
Может быть, у кого-нибудь есть ответы, предложения?

Автор:  Владимир Ситников [ Воскресенье, 18 Февраль, 2018 22:44 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Владимир Невзоров писал(а):
Может быть, у кого-нибудь есть ответы?

Есть.

Владимир Невзоров писал(а):
Неужели моя идея в легком понимании алгоритмов с помощью ДРАКОН схем терпит крах?

Да. Некоторые алгоритмы Дракон лишь запутывает, в чём вы и убедились.

Автор:  Владимир Паронджанов [ Понедельник, 19 Февраль, 2018 09:07 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Владимир Ситников писал(а):
Некоторые алгоритмы Дракон лишь запутывает, в чём вы и убедились.
Это не так.
Мне неизвестны алгоритмы на языке ДРАКОН, которые запутывают.

Прошу предъявить "запутывающие" алгоритмы и я помогу их распутать.

Автор:  adva [ Понедельник, 19 Февраль, 2018 09:19 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Когда я пробовал для себя понять какую-то не очень сложную рекурсивную функцию с помощью дракона, то понял, что дракон мне не помогает. Хотя возможно, на тот момент, мне просто было сложнее понимать рекурсивные функции, чем обычные, скорее всего потому, что мало с ними сталкивался.

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

Автор:  Владимир Паронджанов [ Понедельник, 19 Февраль, 2018 09:35 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

adva писал(а):
Думаю, рекурсии, а может и вообще функции, лучше выражать текстом
Зачем противопоставлять текст и графику?

Как я понимаю, речь идет об обучении начинающих.

Начинающим надо давать оба представления: и текст, и графику (дракон-схему).

Автор:  Степан Митькин [ Понедельник, 19 Февраль, 2018 11:03 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Рекурсия — не для слабаков.
Не имеет значения, в ДРАКОНе или не в ДРАКОНе.

Рекурсию увидеть трудно. Для того, чтобы увидеть рекурсию, нужно:
1. держать в уме название текущего алгоритма
2. выискивать это название в тексте икон (или в структурном тексте).
Это серьёзная нагрузка на мозг в добавок к собственно чтению алгоритма.

К счастью, есть простой выход:
Помечать рекурсивные вызовы. Например, жирным шрифтом. Как здесь:
https://drakon-editor.com/ide/doc/examples/61
Или можно цветом.
И, конечно, это надо делать автоматически.

Автор:  Степан Митькин [ Понедельник, 19 Февраль, 2018 11:14 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Замечание по схеме Олега Гарипова
Текст в иконе вызова процедуры плохо читается:
Код:
Result = Call
"Compute GCD"
with arguments
a2, b2


Как быть?
1. Устранить незначащие слова (слова-паразиты): Call, with arguments
2. Внести графическую струкуру внутрь иконы.

Вот так:
Код:
Result = Compute GCD
    a2
    b2


Или так:
Код:
Result = Compute GCD
    b1
    a1 mod b1


Безжалостно истребляем:
- Незначащие слова
- Запятые и скобки

Добавляем:
- Конец строки после названия процедуры
- Конец строки после каждого аргумента
- Отступы для аргументов

Автор:  Rifat [ Понедельник, 19 Февраль, 2018 11:44 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Как вариант, внутри вызова рекурсивной функции можно не текст написать, а нарисовать тот же алгоритм, но только мелко. И будет видно, что вызов рекурсивный.

Автор:  Владимир Паронджанов [ Понедельник, 19 Февраль, 2018 12:16 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Степан Митькин писал(а):
Рекурсия — не для слабаков.
Не имеет значения, в ДРАКОНе или не в ДРАКОНе.

Рекурсию увидеть трудно. Для того, чтобы увидеть рекурсию, нужно:
1. держать в уме название текущего алгоритма
2. выискивать это название в тексте икон (или в структурном тексте).
Это серьёзная нагрузка на мозг в добавок к собственно чтению алгоритма.

К счастью, есть простой выход:
Помечать рекурсивные вызовы. Например, жирным шрифтом. Как здесь:
https://drakon-editor.com/ide/doc/examples/61
Или можно цветом.
И, конечно, это надо делать автоматически.
Степан, я согласен с вами, что рекурсию увидеть трудно и что есть простой выход.

Я бы предложил такой выход. Справа от Вашей иконы Вставка с жирным шрифтом нарисовать выноску (callout), с жалом, направленным на икону Вставка.

А внутри выноски написать:
Цитата:
Это рекурсивный вызов
или
Цитата:
Это вызов рекурсивной функции
Или что-нибудь в таком роде.

Автор:  Rifat [ Понедельник, 19 Февраль, 2018 13:11 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Многие наверно знают, что любой рекурсивный алгоритм можно представить в виде циклического алгоритма с использованием стека. По сути реализация рекурсии в языках программирования - это скрытое от программиста использование стека. Если использовать варианты алгоритмов использующих цикл, а не рекурсию, то проблем с отображением алгоритма не возникает и его можно отобразить используя существующие элементы Дракон-схем, без необходимости добавления какие-то новых элементов (различных стрелочек, жирных шрифтов, анимации и т.д.).

Автор:  adva [ Понедельник, 19 Февраль, 2018 13:36 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Rifat писал(а):
Многие наверно знают, что любой рекурсивный алгоритм можно представить в виде циклического алгоритма с использованием стека.

Можно, но очень часто, проще работать с рекурсивной функцией, и по объему кода она может быть в разы меньше, и, соответственно, доработать проще

Автор:  Alexey_Donskoy [ Понедельник, 19 Февраль, 2018 14:10 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Степан Митькин писал(а):
Помечать рекурсивные вызовы.
Опять вы крутитесь около частного случая.
Рекурсия - вообще штука не особо интересная (и довольно лёгкая для понимания, чтобы здесь столько копий ломать).
Кстати, можете заметить, что использование рекурсивных алгоритмов более характерно для "вычислительных алгоритмов". :wink:

В общем же случае рекурсия бывает и косвенной, и её вызов просто так не пометишь.

А для "управляющих алгоритмов" гораздо большую проблему представляет потенциальная реентерабельность процедур, особенно значимая в многопоточных системах.
Вот здесь уже целый арсенал типовых средств и приёмов: от локальных переменных в стеке для обеспечения реентерабельности до высокоуровневых потокозащищённых объектов, блокировок, мьютексов и иже с ними...

Автор:  Степан Митькин [ Понедельник, 19 Февраль, 2018 14:39 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

adva писал(а):
Rifat писал(а):
Многие наверно знают, что любой рекурсивный алгоритм можно представить в виде циклического алгоритма с использованием стека.

Можно, но очень часто, проще работать с рекурсивной функцией, и по объему кода она может быть в разы меньше, и, соответственно, доработать проще

Важно не забывать, что предмет обсуждения — как изобразить рекурсию.
Любить рекурсию или нет — это другой вопрос, и другое обсуждение. (Лично я рекурсию не люблю, но регулярно употребляю.)
Задача поставлена так: выделить рекурсию, чтобы она бросалась в глаза.
Методы решения:
- жирный шрифт
- цвета
- выноска

Автор:  Степан Митькин [ Понедельник, 19 Февраль, 2018 14:43 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Alexey_Donskoy писал(а):
В общем же случае рекурсия бывает и косвенной, и её вызов просто так не пометишь.

Косвенная рекурсия — она сволочь, да.

Автор:  Владимир Невзоров [ Понедельник, 19 Февраль, 2018 18:01 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Новая схема.

Спасибо всем участникам за столь активный отклик.
По результатам обдумывания всех предложений и обсуждений сделал следующую схему.
Раньше и подумать не мог, что может так аккуратно получиться.
Я думаю, Вы оцените.

И, конечно же, пожелания и предложения всегда приветствуются! :)
Вложение:
Quick sort_recursion.png
Quick sort_recursion.png [ 744.08 КБ | Просмотров: 11099 ]


Что было сделано.

1) Убрал первую ветку.
В ней лишь инициализировался индекс разбиения.
Из плюсов: стало меньше визуального мусора.

Ранее я рассказывал про области видимости/жизни переменных в С++.
И что в соответствие с этими понятиями как бы вынес переменную индекс разбиения за основные ветки алгоритма, чтобы жила подольше.
Сейчас опустил эту философию.
Переменная сейчас нужна в двух ветках:
1) В первой она инициализируется, затем изменяется.
2) Во второй используется.
Будем считать, что переменная живет и по исходу выполнения алгоритма из 1ой ветки.

2) Выделил глаголы
Вложение:
Преобразование иконки.png
Преобразование иконки.png [ 4.22 КБ | Просмотров: 11099 ]

Где-то Владимир Паронджанов говорил об использование глаголов в алгоритме.
Здесь я идею развил в очищение ключевого слова - глагола/действия - от объекта действия.
Вроде бы не сильное изменение на одной иконе, но, если посмотреть на весь алгоритм, то, мне кажется, лучше видно что происходит.

3) Показал рекурсию.
Вложение:
Варианты рекурсии.png
Варианты рекурсии.png [ 17.47 КБ | Просмотров: 11099 ]

Решил скомбинировать решение из советов. Сразу же приглянулась икона "Полка". А почему бы и... да? :D
Показал два варианта исполнения.
Достаточно ли понятен вызов рекурсии с передачей аргументов?

Автор:  Владимир Невзоров [ Пятница, 23 Февраль, 2018 07:45 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

Хотелось бы получить обратную связь по реализации.
У кого-нибудь есть мысли по схеме - предложения/критика/пожелания?

Автор:  PSV100 [ Пятница, 23 Февраль, 2018 17:59 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

"Обратную связь" здесь ожидают с 2009 г. -- присоединяйтесь в очередь :wink: :
http://forum.drakon.su/viewtopic.php?f=62&t=2026

Имхо, если стараться придерживаться принципа отражения "маршрутной семантики", то необходимо каким-то способом выделять и заголовок алгоритма (как, напр., в функциональных языках по мотивам ML, где рекурсивные функции могут быть отмечены явно: для "let f(x)=..." добавляется "rec" --> "let rec f(x)=...").

Автор:  Владимир Невзоров [ Суббота, 24 Февраль, 2018 14:18 ]
Заголовок сообщения:  Re: Базовые компьютерные алгоритмы

PSV100 писал(а):
"Обратную связь" здесь ожидают с 2009 г. -- присоединяйтесь в очередь :wink: :
http://forum.drakon.su/viewtopic.php?f=62&t=2026

Попытка нарисовать рекурсию.
PSV100, спасибо за предметную ссылку! Сейчас кратко просмотрел, позже вдумчивей прочитаю.
Это тот самый материал, который нужен в данный момент, когда мы обсуждаем как показывать более сложные алгоритмы.

PSV100 писал(а):
Имхо, если стараться придерживаться принципа отражения "маршрутной семантики", то необходимо каким-то способом выделять и заголовок алгоритма (как, напр., в функциональных языках по мотивам ML, где рекурсивные функции могут быть отмечены явно: для "let f(x)=..." добавляется "rec" --> "let rec f(x)=...").

Чувствуется, что в этом что-то есть. Правда, пока не совсем пойму чтобы это все значило :)
Не могли бы разъяснить словами и показать ДРАКОН схему с реализацией Вашей мысли?

Страница 4 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/