![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
X |
|
|||
Unregistered |
Всем привет!
Опять нужна ваша помощь, не могу разобраться. Имеется матрица размером m на n. Надо найти количество локальных минимумов матрицы. Локальный минимум, это элемент, который меньше все соседних элементов, его окружающих. |
|||
|
||||
blackofe |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
навскидку.
идея простая: перебрать все элементы и каждый проверить на вшивость - является ли он локальным минимумом (по ходу дела проверяя выход за границы массива). результат работы программы:
не отрицаю наличия более красивого решения. очень спешил ![]() Это сообщение отредактировал(а) blackofe - 9.12.2005, 02:19 |
||||
|
|||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Грубо говоря у нас 8 соседей (исключения - значения на границах)
Тут код можно упростить в некоторых местах, где проверки частично совпадают, но это для ярых оптимизаторов ![]() |
|||
|
||||
X |
|
|||
Unregistered |
Спасибо большое буду разбираться!!!
|
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Вот, товарищ опередил
![]() Это конечно не алгоритм, а перебор. Если у тебя массив представляет собой двумерную функцию, существуют более "быстрые" алгоритмы поиска локальных минимумов. Почти все представляют собой спуск в обратном направлении градиента. Разница в основном в нахождении оптимальной ширины шага. Добавлено @ 02:35 Хммм. ещё можно отбрасывать "проверенные" элементы, которые точно не могут быть локальным минимумом типа как игра в "кораблики". Нашёл минимум, закрасил всех его соседей идт. |
|||
|
||||
X |
|
|||
Unregistered |
sergej.z мне необходимо только это:
проверили границы и соседей, а потом что? Как найти кол-во лок. минимумов? Объясни поподробнее плиз ![]() |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Дальше разбирать не буду. И так уже достаточно подробно.
|
|||
|
||||
blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
sergej.z
мой первоначальный вариант именно таким и был, просто я все это выстроил по вертикали, и мне не очень понравилось, как это выглядит. вот я и вывел проверку по горизонтали в отдельную функцию. правда из-за этого у меня получилось 9 проверок (включая проверку на себя) - заломало проверять. про "закрашивание" мысль хорошая. усложнило бы алгоритм (это ж их запоминать надо, или делать "слепок" матрицы с "закрасками"), но повысило бы эффективность. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Если построчно проверять, то конечно "прошедшие" уже не надо проверять будет. то есть проверка только один раз каждого квадрата.
Кстати, есть алгоритм для игры в "кораблики"? ИМХО - сюда бы точно подошёл ![]() |
|||
|
||||
blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
sergej.z
прошедшие проверять на "локальную минимумость" было бы не нужно, но возникла бы необходимость проверять на "прошедшесть" ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |