DRAKON.SU

Текущее время: Вторник, 16 Апрель, 2024 14:30

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: Четверг, 15 Май, 2008 17:00 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
adva писал(а):
Если уж для Вас это "главное и основное", то можно примеры где это используется?

Кстати, про числа Фибоначчи. Они ведь основаны на принципе: каждое последующее число является суммой двух предыдущих. На этом же принципе построен и алгоритм генерации псевдослучайных чисел с очень хорошими параметрами распределения и длинными циклами -- "Lagged Fibonacci Generator", также известный как «Subtract-with-borrow Generator» (SWBG):
Код:
  x = if dif >= 0 then dif else 1 + dif,  где  dif = x    - x
   k                                                  k-a    k-b

требуется иметь первоначальный массив размером max(a, b)
со случайными вещественными числами от 0 до 1

рекомендуемые значения лагов a и b:

a = 17, b =  5
a = 55, b = 24
a = 97, b = 33  - ну очень большой период

Этот генератор более качественный, чем классический линейный конгруэнтный генератор, описанный Кнутом в "Искусстве...", при этом числа вычисляются заметно быстрее, так как нет делений/умножений. Единственное, для него нужно иметь предварительный массив чисел, может быть взятый с соответствующего канала в юниксах...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Май, 2008 00:34 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 7
Откуда: Зеленоград
Geniepro писал(а):
Этот генератор более качественный, чем классический линейный конгруэнтный генератор, описанный Кнутом в "Искусстве...", при этом числа вычисляются заметно быстрее, так как нет делений/умножений. Единственное, для него нужно иметь предварительный массив чисел, может быть взятый с соответствующего канала в юниксах...
Действительно, последовательность Фибоначчи с запаздыванием - очень хороший способ генерации псевдослучайных чисел.
Именно его (с константами 24, 55) мы используем для тестов (в используемом процессоре нет операций целочисленного умножения и деления).
Кстати, этот алгоритм я вычитал именно у Кнута в "Искусстве...". :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 23 Май, 2008 20:26 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
А вот ещё интересный и полезный пример использования чисел Фибоначчи: Fibonacci heap -- по ряду параметров превосходит обычную версию кучи (heap). Представляет собой лес деревьев, каждое из которых удовлетворяет условию minimum-heap property

Java-апплет, демонстрирующий работу Фибоначчиевой кучи

Краткое сравнение параметров:
Код:
            Linked List   (Min-)Heap     Fibonacci Heap
insert         O(1)        O(log n)        O(1)
accessmin      O(n)        O(1)            O(1)
deletemin      O(n)        O(log n)        O(log n)*
decreasekey    O(1)        O(log n)        O(1)*
delete         O(n)        O(log n)        O(log n)*
merge          O(1)        O(m log(n+m))    O(1)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 19 Июнь, 2008 20:26 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Илья Ермаков писал(а):
Рекурсивный вызов - да обычно обозначьте, значок "вызов вспомогательного алгоритма" (прямоугольник с отчёркнутыми краями) и имя этой же функции.


Кстати, законно ли совмещать "вставку" и возврат?

Код:
PROCEDURE np(n: INTEGER): INTEGER;
BEGIN
IF n <= 1 THEN RETURN 1
ELSE RETURN n * np(n-1)
END
END np


Вложения:
factorial_rec.JPG
factorial_rec.JPG [ 22.77 КБ | Просмотров: 12973 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Июнь, 2008 20:38 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
По идее, надо ставить полку и писать на ней зарезервированное слово RETURN.
Только вот DRT под полкой не даст переопределить "Операция"->"Действие:вставка, заменить".
На приложенном рисунке поправлено вручную.


Вложения:
factorial_rec1.JPG
factorial_rec1.JPG [ 29.06 КБ | Просмотров: 12898 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Июль, 2008 18:15 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Добавим чуть больше формализма.
На полке просто присвоим значение имени функции.
Вложение:
factorial_rec3.JPG
factorial_rec3.JPG [ 10.84 КБ | Просмотров: 12815 ]


p.s. монолог какой-то получился :?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 18 Июль, 2008 18:36 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5848
Откуда: Москва
Спасибо за Ваш монолог. Его надо осмыслить. Было бы хорошо, если бы Вы в развернутой форме изложили выводы, к которым (как я понимаю) Вы пришли в ходе этого монолога


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 01 Январь, 2009 08:56 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Выводов ещё нет, пока размышления на тему...
Просто стремление максимально уйти в командном языке от дублирования зарезервированных слов целевого языка. Транслятору без разницы, что искать - зарезервированное слово "RETURN" или имя транслируемой функции. Эти значения на момент трансляции известны. Хотя тут появляется несоответствие - при возврате функции на самом деле присваивается возвращаемое значение, надо бы ограничиться иконой "Действие":
Вложение:
factorial_rec4.JPG
factorial_rec4.JPG [ 19.78 КБ | Просмотров: 12781 ]

Но при этом возврат как-то визуально теряется и появляется синтаксически зависимый оператор присваивания. Видимо, придется выбрать одно из двух зол :).

Разные мелкие заморочки могут возникать с иконами, из названия которых явно не следует их применение или недостаточно оговорены формальные правила их применения. "Полка" - одна из таких икон.

p.s. :shock: :shock: :shock: через месяц Чингачгук заметил, что в сарае нет одной стены..

Владимир Паронджанов писал(а):
В рамках философии Дракона ключевые слова управляющих конструкций становятся ненужными. Они рассматриваются как устаревшие, лишние и даже вредные (см. стр. 259—266).

Вопрос снят.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 01 Январь, 2009 09:00 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 239
Откуда: Россия, Стерлитамак
С НОВЫМ ГОДОМ ВСЕХ

Вот кстати тут порассуждали в моей теме про рекурсию на драконе, как раз вопрос хотел задать, а тут уже есть :-) . Попутно возник такой вопрос про оператор RETURN (см. схему):
судя по схеме после после оператор RETURN могут выполняться другие операторы. Если схема будет достаточно сложной, как себя обезопасить от такой ситуации? Пользоваться переменными возврата?

И еще не понял, как изобразить на драконе цикл WHILE. Вроде переключающий цикл похож, но в таком случае сложные предусловияпридется в одну икону выбора запихивать?

ЗЫ: не разобрался кстати, как картинку вставлять картинкой, а не приложенным файлом (ведь локальный комп не http ? Или надо предварительно куда залить эту картинку?)


Вложения:
01.drt [995 байт]
Скачиваний: 737
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 01 Январь, 2009 13:24 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5848
Откуда: Москва
Рэйлвэй Каген писал(а):
...Разные мелкие заморочки могут возникать с иконами, из названия которых явно не следует их применение или недостаточно оговорены формальные правила их применения. "Полка" - одна из таких икон.

p.s. :shock: :shock: :shock: через месяц Чингачгук заметил, что в сарае нет одной стены..

Владимир Паронджанов писал(а):
В рамках философии Дракона ключевые слова управляющих конструкций становятся ненужными. Они рассматриваются как устаревшие, лишние и даже вредные (см. стр. 259—266).

Вопрос снят.


Уважаемый Рэйлвэй Каген!

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

Сделаю пояснения:
1. Старые ключевые слова: ифы, циклы, кейсы, энды и еще кое-что безусловно рассматриваются как "устаревшие, лишние и даже вредные".

2. Но! Иногда возникают проблемы, которые требуют введения новых (или почти новых) ключевых слов.
В книге "Как улучшить работу ума" приведено несколько примеров такого рода.

:arrow: Пример 1. На рис. 84 и 87 в иконе "параллельный процесс" используются ключевые слова Пуск и Останов.

:arrow: Пример 2. На рис.81 и стр. 160 в иконе полка используются ключевые слова Установить признак, Снять признак

и т.д.

По мере выявления задач, которые Дракон не решает (или решает плохо) придется придумывать что-то новое.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Кстати, предложенный Вами гибрид икон Действие, Вставка и Полка кажется полезным.
viewtopic.php?p=17288&sid=5a2ca2aa005b15e094424e13b13ca1e5#p17288

Только его нужно чуть-чуть облагородить. А именно: лучше превратить этот гибрид в НОВУЮ икону Вставка с полкой.
Для этого в икону Вставка добавить горизонтальную линию, не пересекающую внутренние вертикальные палочки.
Прошу рассматривать мои слова после пунктира не как продуманное зрелое предложение, а всего лишь как ответ-экспромт на Ваше сообщение.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 01 Январь, 2009 18:03 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Какой-то глюк конфы. Сообщение я написал ещё летом, а оно на новый год пометилось сегодняшним числом :?:
Вопрос я снял, в основном, из собственных соображений:
1. применение ключевых слов целевого языка(в который предполагается трансляция дракон-схемы) позволит сильно упростить транслятор, НО в итоге повлечёт за собой фактически переписывание строк исходника на Delphi, C, Oberon и т.д. в иконки дракон-схемы. Это на корню убьёт всю идею и методологию Дракона, а также не позволит транслировать одну дракон-схему на разные целевые языки.
2. как я уже писал, для обозначения возврата из функции можно просто присваивать функции возвращаемое значение. Такое представление наиболее полно отражает происходящее в данном конкретном случае. И не требует использования специальных средств для отображения.
Владимир Паронджанов писал(а):
Иногда возникают проблемы, которые требуют введения новых (или почти новых) ключевых слов.
Полностью согласен с Вами, в случае описания этими новыми словами совершенно новых абстракций исполнения программы. Или взаимодействия с такими абстракциями. Сам я попал на такое при "транзитном выходе". Ваше решение было здесь: см.п.1 viewtopic.php?p=21901#p21901 Учитывая Ваши примеры рис.84, 87, 81 и стр.160, получается, что "полка" - почти универсальное средство решения мелких проблем. Думаю, что будет удобно, если у неё появится близнец - "вставка с полкой". Особенно, когда требуется явное указание не на простое действие(напр. "установить признак"), а на вызов по ходу этих действий внешней процедуры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 01 Январь, 2009 18:08 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
2 adva:
по RETURN - м.б. так?
Вложение:
01 - копия.png
01 - копия.png [ 8.03 КБ | Просмотров: 12629 ]

по while -> viewtopic.php?p=22416#p22416

p.s.: чтобы показать картинку, в форме ответа есть Вложение -> Вставить в текст сообщения. А в комбике выберите, что вставлять(загруженную на форум картинку)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 01 Январь, 2009 18:48 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 239
Откуда: Россия, Стерлитамак
Рэйлвэй Каген писал(а):
Какой-то глюк конфы. Сообщение я написал ещё летом, а оно на новый год пометилось сегодняшним числом :?:


Возможно, это я как то пометил, я сначала хотел цитату сделать, а потом передумал, не знаю конкретно с этим или нет связано, но я тоже обратил внимание после своего сообщения, что дата поменялась

Рэйлвэй Каген писал(а):
2 adva:
по RETURN - м.б. так?:


Да РЕТУРН в предложенном виде более очевиден, спасибо за подсказку


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 01 Январь, 2009 23:03 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 341
AVC писал(а):
Geniepro писал(а):
Этот генератор более качественный, чем классический линейный конгруэнтный генератор, описанный Кнутом в "Искусстве...", при этом числа вычисляются заметно быстрее, так как нет делений/умножений. Единственное, для него нужно иметь предварительный массив чисел, может быть взятый с соответствующего канала в юниксах...
Действительно, последовательность Фибоначчи с запаздыванием - очень хороший способ генерации псевдослучайных чисел.
Именно его (с константами 24, 55) мы используем для тестов (в используемом процессоре нет операций целочисленного умножения и деления).
Кстати, этот алгоритм я вычитал именно у Кнута в "Искусстве...". :)

Кстати, товарищи, могу дать идею простого и сверхбыстрого "генератора" псевдослучайных чисел, правда, в узком диапазоне. В свое время применил его при написании на ассемблере игры Super Pacman.
Многие области памяти ЭВМ (в частности, заполненные командами) выглядят, как достаточно равномерный белый шум.
Так что можно, короче, брать просто содержимое ячеек и сравнивать с какими-то граничными значениями. Вот так :wink:


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB