![]() |
|
|
![]()
|
|
| ArNic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Дано: Матрица любого размера со случайными значениями.
Найти: Алгоритм диффузии (Через энное число итераций все значения элементов матрицы должны быть равны.) Текущее решение: За итерацию половина значения каждого элемента (Э) распределяется между соседними элементами (СЭ). Для "Э": [значение "Э"]/2 Для "СЭ": [значение "СЭ"]+([значение "Э"]/(2*[количество "CЭ"])) Результат расположен на: http://test.sallfy.ru/diffusion.php (вес страницы 232,8 Кб ) Т.к. я решил не определять количество соседних элементов. Диффузия на ней работает как если бы это был шар. Задачка сложная. Половина или там четверть отдается - неважно. Это всего лишь коэффициент, переменная. Всё равно не получается сделать нормально диффузию. Возникает аномалия (назовем так - логическую ошибку У кого какие идеи? P.S. Поиск в интернете ... http://www.google.com/search?hl=ru&q=Диффузия+матриц http://www.google.com/search?hl=ru&q=м...е+распределение ... ничего не дал Это сообщение отредактировал(а) ArNic - 23.3.2010, 05:01 |
|||
|
||||
| MaxPayneC |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 18.2.2006 Репутация: нет Всего: 9 |
А какие требования к результату, помимо равенства значений после работы алгоритма? А то можно и среднее арифметическое посчитать )
|
|||
|
||||
| ArNic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Требование такое, чтобы за одну итерацию должны быть обработаны все элементы, но каждый элемент был раздающим только раз за итерацию
Среднее арифметическое - можно для проверки результата использовать. Добавлено через 1 минуту и 13 секунд Тем более что тут не мгновенная диффузиия, а итеративная. Добавлено через 1 минуту и 49 секунд Извиняюсь, что я придумываю термины типа итеративная диффузия, но это хоть как то передает смыл того что должно быть |
|||
|
||||
| nworm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
ограничения надо четко прописать
непонятно, например, почему нельзя среднее арифметическое использовать |
|||
|
||||
| ArNic |
|
||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
В итоге и придет к среднему арифметическому - но это уже в самом конце.
Например есть квадратная матрица 4х4:
Далее цифры должны плавно выравниваться, пока не распределяться по всей площади и не станут равными 2.1875 То есть при энном количестве итерации матрица придет к виду:
Модель также должна работать в случае множества неравных значений – напрмиер:
К
Т.е. в данном случае итерация на манер времени диффузии и сразу выравнивать нельзя. Ну и естественно по ссылке можно увидеть что получилось при среднем арифметическом, применяемом к каждому элементу. |
||||||||||||
|
|||||||||||||
| ArNic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Я сейчас сделал среднее арифметическое для 9 элементов матрицы распределённое равномерно. Что в итоге получается можно глянуть. http://test.sallfy.ru/diffusion2.php
|
|||
|
||||
| ArNic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Равномерная диффузия не получилась даже при повторном прогоне элементов рекурсивно (хотя это 2 такта)
|
|||
|
||||
| nworm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Не знаю как её решать, в общем ):
Отмечу несколько моментов 1. точное среднее арифметическое может не получиться никогда. Например,
среднее арифметическое 1/9 а получается при таком подходе всегда число, не делящееся на 3. Можно искать только приближение (хотя может так и надо?). 2. для всех методов наверняка могут быть специальные расклады, на которых метод будет только ухудшать текущее состояние. 3. даже случайный метод (берём рандомом две соседние цифры и усредняем) наверное будет при большом числе усреднений давать хороший результат. Это сообщение отредактировал(а) nworm - 30.3.2010, 22:31 |
|||
|
||||
| nworm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
для среднего арифметического
нужна какая-то память 1) чтоб туда все элементы засунуть либо хотя бы надо знать 2) размер матрицы и номер текущей итерации, тогда тоже можно среднее арифметическое посчитать, только за 2-а прогона по матрице. Но, похоже, можно действовать только с элементами или нет? |
|||
|
||||
| Domydorogi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 6.4.2010 Репутация: нет Всего: нет |
Пусть Y[i,j] элемент матрицы после итерации; X[m, n] элемент матрицы до итерации
Правильный алгоритм будет такой . Y[i,j] = X[i,j]/2 + (сумма по всем парам m, n не равным i, j ) X[mn]/(2(N-1), где N - полное число элементов матрицы. Сканирование по всем i,j, и переход к следующей итерации. Если совет не устарел, то можешь не сомневаться, что сходится ... проверил. Если нет, то ищи ошибку в коде. |
|||
|
||||
| ArNic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Спасибо, попробую
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |