Я пытаюсь создать дерево Хаффмана с помощью PHP.Создание дерева Хаффмана в PHP
Это то, что у меня есть:
<!DOCTYPE html>
<html>
<body>
<?php
$extract = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse elementum imperdiet aliquet. Duis non molestie orci. Ut eget nibh nec augue ultricies porttitor.';
$characters = count_chars($extract, 1);
asort($characters);
foreach($characters as $character => $occurrence)
{
echo 'There';
if($occurrence > 1)
{
echo ' were ' . $occurrence . ' occurrences of ';
}
else
{
echo ' was '. $occurrence . ' occurrence of ';
}
echo '"<strong>' . chr($character) . '</strong>" in the extract.<br />';
$characterFreq[chr($character)] = $occurrence;
}
print_r($characterFreq);
?>
</body>
</html>
Какие выходы:
There was 1 occurrence of "S" in the extract.
There was 1 occurrence of "U" in the extract.
There was 1 occurrence of "h" in the extract.
There was 1 occurrence of "L" in the extract.
There was 1 occurrence of "D" in the extract.
There was 1 occurrence of "," in the extract.
There was 1 occurrence of "q" in the extract.
There was 1 occurrence of "b" in the extract.
There were 3 occurrences of "g" in the extract.
There were 4 occurrences of "a" in the extract.
There were 4 occurrences of "." in the extract.
There were 4 occurrences of "d" in the extract.
There were 5 occurrences of "p" in the extract.
There were 6 occurrences of "c" in the extract.
There were 6 occurrences of "l" in the extract.
There were 7 occurrences of "m" in the extract.
There were 8 occurrences of "n" in the extract.
There were 8 occurrences of "r" in the extract.
There were 9 occurrences of "u" in the extract.
There were 9 occurrences of "o" in the extract.
There were 10 occurrences of "s" in the extract.
There were 15 occurrences of "t" in the extract.
There were 17 occurrences of "i" in the extract.
There were 20 occurrences of "e" in the extract.
There were 22 occurrences of " " in the extract.
Array ([S] => 1 [U] => 1 [h] => 1 [L] => 1 [D] => 1 [,] => 1 [q] => 1 [b] => 1 [g] => 3 [a] => 4 [.] => 4 [d] => 4 [p] => 5 [c] => 6 [l] => 6 [m] => 7 [n] => 8 [r] => 8 [u] => 9 [o] => 9 [s] => 10 [t] => 15 [i] => 17 [e] => 20 [ ] => 22)
Я использую смеси array_slice()
, array_splice()
и array_unshift()
, но у меня возникают проблемы с рекурсией.
В идеале, листья и ветви будут обозначаться индексами массива 0 & 1.
Любые идеи о том, как сделать дерево Хаффмана в многомерном виде массива будет весьма признателен.
кто готов предложить что-нибудь ..? – verbumSapienti
ну, по крайней мере, он заработал мне значок перелива! – verbumSapienti