![]() |
|
![]() ![]() ![]() |
|
Swi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.9.2006 Репутация: нет Всего: нет |
Допустим у нас есть 10 отрезков на интервале от 0 до 1(все отрезки идут строго друг за другом), надо уменьшить количество отрезков до 4, причем таким образом, что бы все отрезки имели приблизительно равную величину. Длина начальных отрезков полностью случайна, интервал так же подразумевается абсолютно любые начальные и конечные количества отрезков. Начало следующего отрезка находится в окончании предыдущего и соответственно все точки принадлежат как первому так и второму массиву отрезков.
А вообще задача заключается в следующем, есть n случайных чисел, надо из них сделать m случайных чисел, так что бы расстояния были примерно одинаковыми. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
для начала надо придумать критерий "приблизительной равности"
средняя длина составных отрезков - (общая длина)/4 например, можно взять сумму модулей отклонений от средней длины или квадратов отклонений (тогда получится что-то вроде дисперсии) так или иначе потом надо найти разбиение, оптииальное с точки зрения выбранного критерия перебираем конец первого составного отрезка (ну и, соответственно, начало второго) для каждого варианта его конца - конец второго (должен быть не левее первого) ну и для каждого конца второго - конец третьего так получаем все варианты разбиений, выбираем из них то, которое даёт наименьшее значение критерия конечно, частенько в таких задачах полагается найти более-менее оптимизированный способ поиска решения, но учитывая масштабы задачи, вряд ли это имеет большой смысл... -------------------- qqq |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Для меня вообще загадка, что означает "сделать одни числа из других"...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
отображение ![]() -------------------- qqq |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Задача НП полная а посему решение - перебор
-------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
Хм... вот так вот сразу НП-полная?.. а почему? Добавлено @ 19:46 мне, кстати, приходят мысли о применении динамического программирования: здесь стандартная для него ситация - "марковская", т.е. слева и справа от любой точки можно разбивать абсолютно независимо (при подходящем критерии, например, аддитивном или приводимом к нему) для начала постановка: нужно разбить отрезки на группы так, чтобы минимизировать критерий "сумма f(Li)", количество групп разбиения - N, количество исходных отрезков - M строим массив a1[M+1]: a1[m]=f(L[0,m]), т.е. слагаемое из критерия для первого отрезка, если он начинается в 0 и заканчивается в m-й точке по нему строим массив a2[m]=min[по k] ( a1[k]+f(L[k,m]) ) ну и так далее (1 заменить на i, 2 - на i+1) сложность получается N*M... ну, если памяти жалко, то N*M*M -------------------- qqq |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
согласен, условие плохо прочитал
-------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |