User Tag List

Показано с 1 по 10 из 1128

Тема: ЭТЮДЫ

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Кстати, если делать по-уму - то заменятся должны не просто случайные пиксели, но ещё и так чтобы дважды не заменялись те что уже заменены.
    Решается толково написаным RND. Тогда количество итераций можно выяснить исходя из знания площади картинки и количество заменяемых пикселей за раз...
    Это как-бы настоящий подход, а то в большинстве процедур - костыли, прогнали несколько замен - а потом окончательная - весь кусок сразу...
    Не прошло и 4 года, как на спектумкомпьютинг подняли схожую тему: https://spectrumcomputing.co.uk/foru...ic.php?t=11240
    Очень интересует подобный генератор, но знаний в тервере и комбинаторике не хватает, чтобы что-нибудь тут понять.
    Что нужно: генератор, позволяющий настраивать период в заданных пределах, например, имеется массив

    db 1
    db 2
    db 3
    db 4
    db 5

    Хочу запустить генератор с периодом 5, который позволил бы мне из этого массива выбрать за 5 итераций все значения в случайном порядке - "3, 1, 4, 5, 2".
    Или - с периодом 10000 для другого массива, из 10000 элементов.
    Позволяет ли так сделать эта LCG-функция, которая рассматривается в посте?
    программирование сильно возрастает!
    https://zx-pk.ru/threads/474-deb-ass...ull=1#post7841

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    генератор, позволяющий настраивать период
    Ну в общем-то вроде можно взять любой RND (например однобайтовый), который даёт 0...255 и умножать результат на N+1 - получится что в старшем байте и будет нечто 0...N

  4. #3

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Оно-то будет. А что будет? Любой RND может выдать последовательность "3", "3", "3", "1", "4"? Думаю, может. А зачем мне "3", "3", "3"?
    программирование сильно возрастает!
    https://zx-pk.ru/threads/474-deb-ass...ull=1#post7841

  5. #4

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Оно-то будет. А что будет? Любой RND может выдать последовательность "3", "3", "3", "1", "4"? Думаю, может. А зачем мне "3", "3", "3"?
    Ну можно заюзать готовые таблички размером 256 где расставлены все эти 0...N и считывать элементы индексом RND.
    Можно и без таблиц, но возня со всякими там делениями будет замедлять...

  6. #5

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Что нужно: генератор, позволяющий настраивать период в заданных пределах, ... Хочу запустить генератор с периодом 5, который позволил бы мне из этого массива выбрать за 5 итераций все значения в случайном порядке - "3, 1, 4, 5, 2". Или - с периодом 10000 для другого массива, из 10000 элементов.
    Позволяет ли так сделать эта LCG-функция, которая рассматривается в посте?
    Про период линейного конгруэтного генератора не подскажу, но подскажу по другим генераторам: LFSR или Xorshift. Период этих генераторов в точности равен 2^N-1, где N - количество бит состояния. При итеративном исполнении процедуры генератора его состояние меняется на новое; каждое состояние возникает ровно один раз за период. Так что такие генераторы можно и нужно использовать для вещей вроде попиксельной замены экрана. Кстати, в игре Batman The Movie используется именно LFSR.

    Если N=16, то период будет 65535 (на 1 меньше, так как состояние "все нули" не возникает при работе генератора). Если N=4 - то период будет 15.

    Можно зайти и из общих соображений. Любой псевдослучайный генератор имеет некое состояние, которое сохраняется между вызовами. Если для хранения состояния используется N бит - то период повторения не может быть больше 2^N. Может быть меньше (как в случае LFSR, на 1 меньше), или даже намного меньше (при использовании "плохих" LFSR или констант для линейного конгруэнтного). Если период меньше 2^N - то некоторые комбинации бит состояния за период не возникают. Но те, которые возникают, появляются один и только один раз.

    В случае линейного конгруэнтного генератора, так как его состояние является остатком от деления на некоторое число M - то период не может быть больше, чем M. Если правильно подобрать константы - то наверное, можно сделать, чтобы он был строго равен M, что тебе и требуется.

  7. #6

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Что нужно: генератор, позволяющий настраивать период в заданных пределах, например, имеется массив
    а массив можно менять в процессе выборки?
    некоторое время назад решал похожую проблему в лоадере:

    https://www.dropbox.com/scl/fi/0l0cg...9o4ocm0rq&dl=0
    Последний раз редактировалось Bedazzle; 09.04.2024 в 15:21.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  8. #7

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    а массив можно менять в процессе выборки?
    Ну, пускай будет можно. Если в массиве 5-50-500-5000 элементов - то можно и копию сделать, если нужно.
    Но "зачеркивать" уже однажды выбранные элементы - не вариант.
    Последний раз редактировалось 0xDEAD; 10.04.2024 в 00:08.
    программирование сильно возрастает!
    https://zx-pk.ru/threads/474-deb-ass...ull=1#post7841

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Метки этой темы

Ваши права

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