Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: CL | DM;

Вниз

Массив   Найти похожие ветки 

 
Archy   (2006-04-28 22:29) [0]

как сделать чтоб упорядоченный массив разбить на 2 части с примерно равными суммами значений?
тока чтоб эллементы не перемешивались.


 
Archy   (2006-04-28 22:32) [1]

НАПР:сумма 2-х первых ел-ов примерно равнялась сумме 3-го 4-го 5-го эл.
(если в массиве 5 эл-ов)


 
Джо ©   (2006-04-28 22:49) [2]

Если правильно понял, то (1) проходим по всему массиву один раз, вычисляя сумму элементов. Затем опять проходим его с начала, суммируя и сравнивая сумму с уже известной общей. Останавливаемся и возвращаемся к пред. результату, если сумма превышена. В таком роде.


 
Archy   (2006-04-28 22:58) [3]


> Затем опять проходим его с начала, суммируя и сравнивая
> сумму с уже известной общей

я тебя немножко не понял, тут же полюбому сумма будет больше в 2 раза


 
Джо ©   (2006-04-28 23:37) [4]

> [3] Archy   (28.04.06 22:58)
> я тебя немножко не понял, тут же полюбому сумма будет больше
> в 2 раза

Я просто по-спешки описку сделал. Сравнивать, конечно, не с общей суммой, а с ее половиной.
Т.е, имеем массив:

1 2 4 6 9 12 20

Сумма его елементов: 54. Получаем полусумму: 27.
Проходим его еще раз, последовательно подсчититывая сумму:

1 3 7 13 22 34 54

Видно, что на 5-м элементе сумма 22 (меньше полусуммы), а на 6-м уже 34 (больше полусуммы). Следовательно, примерная "середина" или на 5 или 6-м элементе. Выбирай, разница от полусуммы на котором меньше.


 
Archy   (2006-04-28 23:46) [5]

во спасибо!!!! помог!!!!
а вот ещё вопрос:
закончил с кодир-ем, получил, к примеру,
a=000001
b=10
c=001
d=11

как потом будет можно расшифровать сообщение типа:
1100100000110
если все 0 и 1 написанц слитно


 
Strate ©   (2006-04-28 23:55) [6]

Archy   (28.04.06 23:46) [5]

Я так понял, что

a=000001
b=10
c=001
d=11


это алфавит?

Ну, наверное так:

Читаем первый элемент. В вашем случае 1.
Смотрим: подходят пока что только b и d.
Читаем второй. Получилось 11 Это уже подходит только под D.
Выяснили, что первая "буква" - D. Отбрасываем её из 1100100000110, остаётся только 00100000110 Ну, и так далее.

Терзают смутные сомнения, что это всё можно сделать с помощью операторов AND, OR, NOT, XOR и.т.п, тока я не знаю как.


 
Strate ©   (2006-04-28 23:57) [7]

Только нужно постараться, чтобы не было вот такого:

A=1
B=001
C=0011

Тогда невозможно будет правильно интерпретировать строку 00110011

Толи "CC", толи "BAC", то ли "BABA"...


 
Cash ©   (2006-04-29 18:14) [8]

Archy   (28.04.06 23:46) [5]:
Необходимо создавать "непрефиксный код".
Хаффман и Шеннон-Фано с этим хорошо справляются.
Как сказал Strate [6], чтение производить побитово, и подбирать кодовое
слово по этому считанному префиксу. (удобнее всего для этого
использовать дерево кодовых комбинаций как у Хаффмана)
А в случае с префиксным кодом можно из ситуации вылезти с помощью
гамма- и омега- шифрования.

Вот мой любимый линк для развития:
http://algolist.manual.ru


 
comtat ©   (2006-04-29 23:40) [9]

Это известная задача теории расписания и называется
она "задача о разбиении". Она Np- трудна т.е. нет даже полиномиально разрешимого алгоритма.
Но зато сводится к задаче оптимизации в теории расписаний.
Если найдется решение то такое разбиение существует, иначе разбит незя.

Могу написать алгоритм...

Незряж я сеня ходил на эту долбанную лекцию по теории расписания



Страницы: 1 вся ветка

Текущий архив: 2006.06.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.092 c
1-1146048770
Leonardo
2006-04-26 14:52
2006.06.04
ListBox с рамкой


2-1147930384
zorik
2006-05-18 09:33
2006.06.04
TPageControl. Скрыть закладки


15-1147070109
Nic
2006-05-08 10:35
2006.06.04
Задача со строками


15-1146896035
igorserg
2006-05-06 10:13
2006.06.04
Как отловить, что комп уходит в спящий или ждущий режим?


15-1146928718
ArtemESC
2006-05-06 19:18
2006.06.04
SetLength, Trim в BP