Так можно и на задачу о рюкзаке напороться. Судя по всему, сначала все частоты сортируем по убыванию (ну или возрастанию) а потом массив "разрезаем" на две части. Никакого перебора. Да оно и по логике так. Нет особого смысла добиваться идеального деления пополам. Поскольку в дальнейшем из за этого могут возникнуть большие перекосы. Чтобы таких перекосов избежать, в группы объединяются "близкие" частоты ... примерно одного порядка. Для примера, пусть частоты 13,8,4,2,1. "Простой" разрез приводит к двум группам (13) и (8,4,2,1). Перекос (13 -- 15) небольшой. Это в конце концов дает 13- 1бит, 8- 2бит, 4- 3бит, 2- 4бит, 1- 4бит. Результат 13+2*8+3*4+4*(2+1)=53. Если же использовать на первом шаге идеальное разбиение (13,1) и (8,4,2), то получим 13- 2бит, 1- 2бит, 8- 2бит, 4- 3бит, 2- 3бит. Результат 2*(13+8+1) +3*(4+2)=62. Это случилось потому, что в одну группу попали "очень разные" частоты 13 и 1. А вообще, лучше всего использовать коды Хаффмана. Время их построения такое же, но они зато гарантируют оптимальность.
|