![]() |
|
![]() ![]() ![]() |
|
Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Это ведь правда мудрая мысль. Наверняка у тебя есть чем заняться, кроме ускорения поиска прямоугольников. Сначала убедись, что ускорять надо, а уже потом трать на это время. Всего-то нужно инкапсулировать функцию запроса, чтобы потом ее можно было легко переписать не тревожа остальной код - если будут тормоза. И вообще, как сказал кто-то из гуру, "самый надежный код - тот, которого нет". Но, на всякий случай, на будущее: Сортировать только по минимуму. Либо по максимуму. Разницы особой нет, зависит от вида запросов. А размер (длину-ширину) учитывать уже при запросе, это ведь просто. Добавлено через 8 минут и 48 секунд
Вовсе не все, а только до того прямоугольника, координата которого >= точки запроса (это если отсортировано по минимумам). И оставлять для дальнейшей проверки только те прямоугольники, у которых мин+длина <= точки запроса. То же самое по другой координате. Полученные списки пересечь. Можно вообще оставить только один индекс, а попадание по другой координате проверять явно (для каждого прямоугольника из найденной последовательности). Число проверяемых прямоугольников существенно уменьшается. -------------------- ... |
||||
|
|||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 2 Всего: 85 |
Хорошо, давайте разберемся с этим. ![]() Вот простейший случай 9 одинаковых кубиков. Кубики отсортированы по левому краю, порядковые номера в индексе показаны. Допустим точка попала в центр. По индексу она попала между 6 и 7. Итак с 7 по 9 мы точно отбрасываем. Необходимый кубик где-то ниже или равен 6. (т.е. в диапазоне 1...6) Начинаем с 6 и вниз. До какого пробегать? т.е меня интересует что поставить вместо END for (int i= 6; i>END; --i) if (совпали?) break; |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
ИМХО простой перебор вседа самый долгий. Ну, если, конечно, у Вас не пара-тройка прямоугольников. Но я не утверждаю, что мое предложение самое быстрое. Я поленился расписывать совсоем уж детально. Поэтому Вы и поняли это как многократные пробежки. Попробую уточнить.
![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Да, ты прав, я спутала с одномерными интервалами. Ранее вроде предполагалось, что прямоугольники не пересекаются. Но проекции их запросто могут. И доп. индексы тоже особо не спасают, т.к. скорее все запутывают. Можно, конечно, делать как предлагает Y: "отбрасывать" - фактически, вычислять пересечение множеств - 2 или 4 (если по всем сторонам индексировать), но как-то это чересчур. Лучше уж кластеры. ЗЫ Есть еще способ отобразить плоскость в линию с помощью фракталов. В этом случае точки плоскости упорядочиваются в соответствии со своим порядком на фрактальной линии. Но это как-то слишком кучеряво для данной задачи. -------------------- ... |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 2 Всего: 85 |
В принципе к-д дерево, что предложил baldina и приводит к-мерное пространство к одномерной системе. (Это я своими словами. ![]() Трудность только построить эффективное дерево автоматически... |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Не, это как раз не очень трудно... похоже на деревья решений. Смысл в том, что каждый раз нужно выбрать "наиболее разделяющее" значение.
Просто страшно поначалу, потому что слова все такие умные. Это я свои впечатления излагаю, как раз недавно с Decision Tree разбиралась. Оказалось, если не сильно умничать со всякими там улучшениями, ничего страшного. Главное, действительно быстро (и строит и классифицирует). Но это, конечно, не сведение к одномерной системе, а линейный классификатор. Но не в терминах суть. Если у тебя есть время \ возможность \ желание заморачиваться, попробуй. Решение в самом деле красивое. -------------------- ... |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
В Вики, конечно. Читать английский вариант. Потом идешь по ссылке на алгоритм ID3. Там где-то рядом есть и код, но не читабелен, имхо. Проще разобраться и написать самому. Без примеров вряд ли что-то найдешь; причем почему-то примеры всегда на редкость дебильные; при этом все про дискретный случай и про булевские функции (да\нет). Но для небулевских (несколько классов) строится точно так же (все эти энтропии и прочая хрень). Про действительные переменные тоже можно что-то найти, но в основном додумывается, после погружения в тему. Я весь поиск начинала с Вики, оттуда по ссылкам и т.д. По старой привычке храню не ссылки, а скачиваю документы, поэтому ссылками не поделюсь. Но найти не проблема.
-------------------- ... |
|||
|
||||
I_Am_Rock |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 523 Регистрация: 18.1.2008 Репутация: нет Всего: 15 |
||||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Если про эту задачу, то, когда я писал, параллельность задана не была. Если вообще - то это, звиняюсь, как? -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |