我正在尝试使用 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 表示。
任何关于如何以多维数组形式制作霍夫曼树的想法将不胜感激。