|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Comoderator Of Ru Algorithms 2:5002/46.4 10 Apr 2003 08:01:52 To : All Subject : 2 faq --------------------------------------------------------------------------------
Все эти подсчеты производились для не префиксных кодов Хаффмана т.е.
кодов, которые нельзя идентифицировать однозначно. Hапример код A - 01011 и
код B - 0101 . Если мы будем получать эти коды побитно, то получив биты 0101
мы не сможем сказать какой код мы получили A или B , так как следующий бит
может быть как началом следующего кода, так и продолжением предыдущего.
Hеобходимо добавить, что ключем к построению префиксных кодов служит
обычное бинарное дерево и если внимательно рассмотреть предыдущий пример
с построением дерева , можно убедится , что все получаемые коды там
префиксные.
Одно последнее примечание - алгоритм Хаффмана требует читать входной
файл дважды , один раз считая частоты вхождения символов , другой раз
производя непосредственно кодирование.
P.S. О "ключике" дающем дорогу алгоритму Running.
---- Прочитав обзорную информацию о Huffman кодировании подумайте
над тем, что на нашем бинарном дереве может быть и 257
листиков.
Литература :
------------
1) Описание архиватора Narc фирмы Infinity Design Concepts, Inc.;
2) Чарльз Сейтер,'Сжатие данных', "Мир ПК",N2 1991;
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Q33. Перевод 256цв-2цв
A: Alexander (2:5015/103.19)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Делаешь так:
Каждый цвет по палитре переводишь в твойку (R,G,B), потом считаешь общую
интенсивность по формуле I = 0.229*R+0.587*G+0.114*B, если общая интенсивность
больше некого порогового значения (попробуй его менять - интересная штука
получится), то результирующий цвет - 1, иначе - 0.
A: Sergey Belikov (2:5054/67.4)
Если тебе нужно сделать из цветной картинки ч/б или ч/к и т.д., вобщем
алгоритм такой ((r+g+b)/3) - нахождение яркости r=g=b=((r+g+b)/3)- для ч/б
r=((r+g+b)/3) g=0 b=0 для з/ч. Можно сделать для любого цвета, находишь
процентное содержание красного, зеленого, синего, потом соответсвенно
умножаешь каждый коэффицент на яркость.
ОТ РЕДАКЦИИ: существует очень много различных моделей, какую использовать -
решать только вам. Я могу предложить еще так:
y=0.299r+0.587g+ 0.114b
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Q34. Алгоритм нахождения оптимальной траэктории (динамическое
программирование).
A: Sergey Novak (2:469/138.1)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
AM> Конкретно интересует алгоритм нахождения оптимальной траектории,
AM> основанные на принципе Беллмана. В инете искал - честно не нашел :^(
Раз уж за долгий промежуток времени никто не ответил, попробую я.
Для тех кто не знает скажу, что этот алгоритм нужен для максимизации или
минимизации в неклассических задачах. Hапример, для нахождения оптимального
пути для максимизации скорости в случае если на каджом участке максимальная
развиваемая скорость может быть различной (например, где то асфальт, где то
сельская дорога, а где то надо лес рубить чтоб пройти пешком) Иногда ведь
быстрей прорубить один метр леса вместо того, чтоб объезжать по асфальту 100
км. В общем зачем это нужно смысл ясен. Теперь "КАК".
В решении задач методом программирования Белмана заложен принцип оптимальности.
Он заключается в том, что любая оптимальная траектория оптимальна только от
своего начала и не имеет значения как система попала в данное состояние. Т.е.
каждый кусок заданной территории оптимален относительно своего начала.
Механизм нахождения оптимальной траектории лучше объяснять на примере. Hа
практике я его никогда не использовал.
Hапример, дана площадь M, которую надо пройти из А в Б по оптимальному пути,
затратив наименьшее количество денег, с учетом того, что в разных местах цена
преодоления площади различна.
Площадь разбивается на квадраты. Каждая сторона квадрата от этой площади
обозначается ценой за ее преодоление. Примерно вот так:
1 2 3 4
| | | | Б
1 ------- --70--- ---10-- ---5--- -------
| | | |
| 10 25 |
5 | | 15
| | | |
2 ------- ---15-- ---3--- -45---- -------
| | | |
8 5 30 50
| | | |
| | | |
4 ------- ---25-- ---15-- ---20-- -------
| | | |
15 5 35 5
| | | |
| | | |
5 ------- ---20-- --12--- --20--- -------
А | | | |
Задача решается от конечной точки Б с координатами 4:1, проставляя стрелки,
указывающие оптимальный путь из текущей точки к Б и цену за это.
Hачинаем заполнять цену, за определение пути.
В точку (3:2) можно добраться двумя путями: через (3:1) и через (4:2)
По первому пути цена равна 5+25=30
По второму : 15+45
Естественно, что в точку (3:2) выгодней добираться по первому пути.
1 2 3 4
| | | | Б
1 ------- --70--- ---10-- 5 ---5--- 0 -------
| | | ----> |
| 10 25 | |
5 | | | 15
| | | |
2 ------- ---15-- ---3--- 30 -45---- 15 -------
| | | |
8 5 30 5
| | | |
| | | |
3 ------- ---25-- ---15-- ---20-- -------
| | | |
15 5 35 5
| | | |
| | | |
4 ------- ---20-- --12--- --20--- -------
А | | | |
Далее считаем как лучше добраться в (2:2)
Варианты: либо через (2:1) , либо через (3:2)
через (2:1) цена равна 25
через (3:2) цена равна 33
Значит выбирается путь через (2:1)
Там где стоит "x" тот путь не выгоден
1 2 3 4
| | | | Б
1 ------- --70--- 15 ---10-- 5 ---5--- 0 -------
| | -----> | -----> |
| 10| 25 | |
5 | | | | 15
| | | | |
2 ------- ---15-- 25 ---3-x- 30 -45--x- 15 -------
| | | |
8 5 30 5
| | | |
| | | |
3 ------- ---25-- ---15-- ---20-- -------
| | | |
15 5 35 5
| | | |
| | | |
4 ------- ---20-- --12--- --20--- -------
А | | | |
А вот с точкой (1:1) получается интересно. В нее выгодней добираться через
(1:2). Так цена получится 45 у.е., в отличие от того, чтоб мы добирались по
прямой через (2:1). Тогда бы цена была 70.
1 2 3 4
| | | | Б
1 ------- 45--70--- 15 ---10-- 5 ---5--- -------
| | -----> | -----> |
| 10 | 25 | |
5 | | | | 15
| ------> | | | | |
2 ------- 40---15-- 25 ---3-x- 30 -45-x-- 15 -------
| | | |
8 5 30 5
| | | |
| | | |
3 ------- ---25-- ---15-- ---20-- 20 -------
| | | |
15 5 35 5
| | | |
| | | |
4 ------- ---20-- --12--- --20--- -------
А | | | |
В точку (3:3) выгодней добираться через (4:3) Цена будет 40 :
1 2 3 4
| | | | Б
1 ------- 45--70--- 15 ---10-- 5 ---5--- -------
| | -----> | -----> |
| 10 | 25 | |
5 | | | | 15
| ------> | | | | |
2 ------- 40---15-- 25 ---3-x- 30 -45-x-- 15 -------
| | | | .
8 5 30 5 |
| | | | |
| | | -------> | |
3 ------- ---25-- ---15-- 40 ---20-- 20 -------
| | | |
15 5 35 5
| | | |
| | | |
4 ------- ---20-- --12--- --20--- -------
А | | | |
Дальше все одинаково:
в (2:3) добираемся через (2:2) = 30 у.е.
в (1:3) через (1:2) за 48 у.е.
1 2 3 4
| | | | Б
1 ------- 45--70--- 15 ---10-- 5 ---5--- -------
| | -----> | -----> |
| 10 | 25 | |
5 | | | | 15
| ------> | | | | |
2 ------- 40---15-- 25 ---3-x- 30 -45-x-- 15 -------
| . | . | | .
8 | 5 | 30 5 |
| | | | | | |
| | | | | -------> | |
3 ------- 48---25-- 30 ---15-- 40 ---20-- 20 -------
| | | |
15 5 35 5
| | | |
| | | |
4 ------- ---20-- --12--- --20--- -------
А | | | |
В точку (3:4) попадаем за 45 через (4:4)
А в (2:4) через (2:3) за 35 у.е.
1 2 3 4
| | | | Б
1 ------- 45--70--- 15 ---10-- 5 ---5--- -------
| | -----> | -----> |
| 10 | 25 | |
5 | | | | 15
| ------> | | | | |
2 ------- 40---15-- 25 ---3-x- 30 -45-x-- 15 -------
| . | . | | .
8 | 5 | 30 5 |
| | | | | | |
| | | | | -------> | |
3 ------- 48---25-- 30 ---15-- 40 ---20-- 20 -------
| | . | | .
15 5 | 35 5 |
| | | | | |
| | | | ------> | |
4 ------- ---20-- 35 --12--- 45 --20--- 25 -------
А | | | |
И вот наконец настал решающий момент, когда считается последняя сумма и
становится очевидным результат:
1 2 3 4
| | | | Б
1 ------- 45--70--- 15 ---10-- 5 ---5--- -------
| | -----> | -----> |
| 10 | 25 | |
5 | | | | 15
| ------> | | | | |
2 ------- 40---15-- 25 ---3-x- 30 -45-x-- 15 -------
| . | . | | .
8 | 5 | 30 5 |
| | | | | | |
| | | | | -------> | |
3 ------- 48---25-- 30 ---15-- 40 ---20-- 20 -------
| | . | | .
15 5 | 35 5 |
| | | | | |
| ------> | | | ------> | |
4 ------- 55---20-- 35 --12--- 45 --20--- 25 -------
А | | | |
В итоге самая минимальная сумма, которую нужно вложить на преодоление пути 55
у.е.
1 2 3 4
| | | | Б
1 ------- 45--70--- 15 ---10-- 5 ---5--- -------
| | -----> | ------> |
| 10 | 25 |
5 | | | 15
| | | | |
2 ------- 40---15-- 25 ---3-x- 30 -45-x-- 15 -------
| | . | |
8 5 | 30 5
| | | | |
| | | | |
3 ------- 48---25-- 30 ---15-- 40 ---20-- 20 -------
| | . | |
15 5 | 35 5
| | | | |
| ------> | | | |
4 ------- 55---20-- 35 --12--- 45 --20--- 25 -------
А | | | |
Стрелки от точки А нам показывают как нужно двигаться и в каждой точке стоит
цена за преодоление пути от нее к точке Б.
Итак, оптимальный путь из (1:4) в (4:1) :
(1:4) > (2:4) > (2:3) > (2:2) > (2:1) > (3:1) > (4:1)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Q35. Построение 3D-ландшафтов
A: Mark Shevchenko (2:5093/27.77)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
DK>>> Как можно постpоить yбедительный ландшафт? Сам я этой темой
DK>>> занимаюсь давно, но pезyльтаты меня не yдовлетвоpяют...
MS>> http://freespace.virgin.net/hugo.elias/models/m_perlin.htm
DK> Спасибо, конечно, но мне в инет залезать неохота, я за него плачy.
DK> Я пpосил эхотаг.
Понятно. Попpобyю на пальцах объяснить - но там, кyда я тебя отслал всё то же
самое с каpтинками и более пpодyманно выpажено (я же бyдy писать, как бог на
дyшy положит, сам понимаешь, вpемени на подготовкy нет).
Итак, там описана шyмовая фyнкция Пеpлина. Я здесь напишy, как она стpоится в
двyмеpном слyчае, на тpёхмеpный пеpеносится без пpоблем. Если на гpафик этой
фyнкции смотpеть (двyмеpный слyчай), то напоминает он сpез гоpной цепи, в
тpёхмеpном слyчае - обычный ландшафт.
Понятно, что мы должны по кооpдинате Х полyчать кооpдинатy У, пpичём такyю,
чтобы гpафик был "ландшафтным". Делается это в несколько пpоходов.
Сначала выбиpаешь интеpвал, где y тебя бyдет стpоится гpафик. Разбиваешь его на
N частей pавной шиpины, в каждой из pазбивающих точек беpёшь слyчайное число от
0 до 1 (нyжна фyнкция y = random(x), пpимеpы нескольких таких фyнкций можешь
найти в статье, :) в пpостейшем слyчае можешь воспользоваться паpой { srand(x);
--- GoldED+/386 1.1.4.7
* Origin: Всёфигня кроме пчёл,хотя пчёлы,еслиподумать,тоже фигня (2:5002/46.4)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/27623e942a86.html, оценка из 5, голосов 10
|