Список форумов Шадринский форум -> Программирование -> Программирование для школьников и студентов. -> Задача о равномерном распределении чисел
Начать новую тему   Ответить на тему   вывод темы на печать

Задача о равномерном распределении чисел

Автор
Сообщение
Шатунов
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 16.07.2007
Сообщения: 2091
Откуда: Оренбургская обл.

Статус: Offline
СообщениеДобавлено: 2012.07.24 11:16.01
Ответить с цитатой
Имеется массив А из N элементов ,где (1<=N<=10^6) (1<=A[i]<=10^3)
Задача:
Разделить массив А на 2 массива B и С таким образом чтобы разница сумм элементов этих массивов была минимальна.

Пример:
Массив А
1 2 3 4 5
------------------------------------
Массив В
5 2 1
Массив С
4 3
_________________
Даже когда тебя сожрали у тебя есть два выхода
Посмотреть профиль Отправить личное сообщение AIM Address Yahoo Messenger MSN Messenger ICQ Number
clicks
Заслуженный писатель



Зарегистрирован: 02.05.2012
Сообщения: 1184


Статус: Offline
СообщениеДобавлено: 2012.07.24 11:31.54
Ответить с цитатой
Шатунов
один вариант допускается найти или все возможные?
Посмотреть профиль Отправить личное сообщение
Шатунов
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 16.07.2007
Сообщения: 2091
Откуда: Оренбургская обл.

Статус: Offline
СообщениеДобавлено: 2012.07.24 12:24.15
Ответить с цитатой
clicks
Хотя бы один
_________________
Даже когда тебя сожрали у тебя есть два выхода
Посмотреть профиль Отправить личное сообщение AIM Address Yahoo Messenger MSN Messenger ICQ Number
clicks
Заслуженный писатель



Зарегистрирован: 02.05.2012
Сообщения: 1184


Статус: Offline
СообщениеДобавлено: 2012.07.24 13:44.30
Ответить с цитатой
Шатунов писал(а):
Хотя бы один


вот набросал на C, для примера http://codepad.org/yZH3rfa8
1. сортируем
1.2 находим сумму массива и делим на 2
2. к максимальному начинаем прибавлять минимальные
2.1.если сумма становится больше половины суммы массива а, останавливается. это получился массив b, а все остальное это массив с


Последний раз редактировалось: clicks (2012.07.24 22:49.51), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
Шатунов
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 16.07.2007
Сообщения: 2091
Откуда: Оренбургская обл.

Статус: Offline
СообщениеДобавлено: 2012.07.24 14:05.37
Ответить с цитатой
Спасибо конечно, но очевидно же что этот детский алгоритм не может корректно работать на серьёзных входных данных... +вы сортируете массив из 10^6 пузырьком, а как мы знаем его сложность О(n^2).. при n=10^5 она будет работать около 70 секунд а при 10^6 это будут коллапс, я не могу так долго ждать. меня не устраивает скорость роста квадратичной функции....
Ваш алгоритм валится на простейшем тесте:
Входные данные:
1,4,5,6,7,9
Результат работы вашего алгоритма:
В = 9,1,4 //9+1+4=14
С = 5,6,7 //5+6+7=18
Как должно быть
В = 9,1,6 //9+1+6=16
С = 5,4,7 //5+4+7=16
_________________
Даже когда тебя сожрали у тебя есть два выхода
Посмотреть профиль Отправить личное сообщение AIM Address Yahoo Messenger MSN Messenger ICQ Number
clicks
Заслуженный писатель



Зарегистрирован: 02.05.2012
Сообщения: 1184


Статус: Offline
СообщениеДобавлено: 2012.07.24 15:27.01
Ответить с цитатой
Шатунов
угу, согласен Smile
подумаю вечерком
Посмотреть профиль Отправить личное сообщение
clicks
Заслуженный писатель



Зарегистрирован: 02.05.2012
Сообщения: 1184


Статус: Offline
СообщениеДобавлено: 2012.07.24 22:47.32
Ответить с цитатой
много времени уделить вечером задаче не удалось, но вот такие выводы
по первому замечанию - про время сортировки, решить другим методом сортировки - это не проблема.

важно вот что
мой алгоритм, находит в действительности же некое приближение к оптимальному варианту. (ссылку вверху подправил)
Найти же полностью оптимальный вариант, пока как методом перебора у меня мыслей нет. Но перебор понятное дело при цифрах 10^6 - это утопия. Пока что тупик.

Добавлено спустя 31 минуту 2 секунды:

вот что нашел
http://www.wikiznanie.ru/ru-wz/index.php/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE%D0%B1_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%83%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B5

как я понял полного полиномиального решения пока не придумали, не?
Посмотреть профиль Отправить личное сообщение
Шатунов
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 16.07.2007
Сообщения: 2091
Откуда: Оренбургская обл.

Статус: Offline
СообщениеДобавлено: 2012.07.24 23:35.51
Ответить с цитатой
clicks писал(а):
http://www.wikiznanie.ru/ru-wz/index.php/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE%D0%B1_%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%83%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B5

Спасибо. Оно самое.
clicks писал(а):
как я понял полного полиномиального решения пока не придумали, не?

Увы пока нет.
_________________
Даже когда тебя сожрали у тебя есть два выхода
Посмотреть профиль Отправить личное сообщение AIM Address Yahoo Messenger MSN Messenger ICQ Number
Циник Ban List
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 08.11.2009
Сообщения: 852


Статус: Offline
СообщениеДобавлено: 2012.10.15 21:39.05
Ответить с цитатой
быстрая сортировка исходного массива по убыванию.
далее разброс в 2 массива, по ходу в 2 переменные суммируешь и сравниваешь, если первая больше второго, запись во второй массив нового элемента, иначе в первый
Посмотреть профиль Отправить личное сообщение
Шатунов
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 16.07.2007
Сообщения: 2091
Откуда: Оренбургская обл.

Статус: Offline
СообщениеДобавлено: 2012.11.08 19:22.22
Ответить с цитатой
Циник
Шатунов писал(а):
Результат работы вашего алгоритма:
В = 9,1,4 //9+1+4=14
С = 5,6,7 //5+6+7=18
Как должно быть
В = 9,1,6 //9+1+6=16
С = 5,4,7 //5+4+7=16

_________________
Даже когда тебя сожрали у тебя есть два выхода
Посмотреть профиль Отправить личное сообщение AIM Address Yahoo Messenger MSN Messenger ICQ Number
Страница 1 из 1
Начать новую тему   Ответить на тему   вывод темы на печать
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> Программирование для школьников и студентов. -> Задача о равномерном распределении чисел

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы