Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделить набор точек на две группы, Задача сортировки 
:(
    Опции темы
_Y_
Дата 27.3.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



В простейшем случае имеется плоскость и на ней точки.
user posted image
Надо найти точку пересечения двух прямых параллельных осям (красные прямые) так, чтобы прямые делили точки на две группы. Естественно, могут быть случаи когда  искомых точек много или когда такой точки нет вообще. Группы могут располагаться так, как показано на рисунке (растущая зависимость) или в двух других секторах (убывающая зависимость) - не важно.

Что-то у меня ничего кроме перебора не получается smile 





--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Akina
Дата 27.3.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(_Y_ @  27.3.2008,  13:37 Найти цитируемый пост)
Что-то у меня ничего кроме перебора не получается

И не получится, если нет зависимости. Но предварительная сортировка по координатам снизит вычислительные затраты.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dereyly
Дата 27.3.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 1
Всего: 4



Можно использовать принцип карт кохонена... т.е. множество точек итеративно притягивает "точку пересечения"...
user posted image


Это сообщение отредактировал(а) dereyly - 27.3.2008, 15:34
PM MAIL   Вверх
maxdiver
Дата 27.3.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



Извиняюсь, не совсем понял смысл "перебора".
Имеется в виду сортировка и последующее решение за O(N)?

Это сообщение отредактировал(а) maxdiver - 27.3.2008, 23:15
PM MAIL WWW ICQ   Вверх
SoWa
Дата 28.3.2008, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



maxdiver, сортировка уже исключает О(н)


dereyly, можно поподробнее? Плюсик дам smile


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Akina
Дата 28.3.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(SoWa @  28.3.2008,  07:56 Найти цитируемый пост)
сортировка уже исключает О(н)

Однозначно - но при правильном построении алгоритма - отсечение на сортированном множестве - сортировка и будет самым медленным этапом  smile 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
dereyly
Дата 29.3.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 1
Всего: 4



Суть метода обучения карт Кохонена (ну необязательно карт, ну кохонен для ээтого случая не причем просто навеяло) заключается в последовательном переборе точек и притягивания ближайших кластерных элементов. 
Для данного случая алгоритм выглядит примерно так:

Код

n_epoсh=10;
koef=0.4;
dkoef=koef/(n_epoсh+1);
for (int k=0;k<n_epoсh;k++)
{
    for (int i=0;i<kol_tochek;i++)
    {
         classter.x+=koef*(point[i].x-classter.x);
         classter.y+=koef*(point[i].y-classter.y);
    }
   koef-=dkoef;
}

PM MAIL   Вверх
v2v
Дата 29.3.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



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

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

для более точного подсчёта надо читать теорию по нейронным сетям...

Это сообщение отредактировал(а) v2v - 29.3.2008, 00:35


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.