我一直在練習編碼一些算法(求職面試時間),並編寫了霍夫曼壓縮算法,並且遇到了類似於Ruby數組類中的奇怪行爲。奇怪的數組行爲?
一旦我建立了我的堆,我做了我的樹的前序遍歷並將符號和二進制值存儲在散列表中。這是方法。
def encode(huffman_tree, encoded_chars, binary)
if huffman_tree.is_leaf?
encoded_chars[huffman_tree.symbol] = binary
else
encode(huffman_tree.left, encoded_chars, binary + '0')
encode(huffman_tree.right, encoded_chars, binary + '1')
end
end
這工作得很好,但我以前一直空數組作爲二進制PARAM傳球,然後追加到該數組
def encode(huffman_tree, encoded_chars, binary)
if huffman_tree.is_leaf?
encoded_chars[huffman_tree.symbol] = binary
else
encode(huffman_tree.left, encoded_chars, binary << 0)
encode(huffman_tree.right, encoded_chars, binary << 1)
end
end
我會給予你,它更有意義,只是使用一個字符串,但我認爲我應該能夠對數組做同樣的事情。然而,當我將二進制算法作爲數組運行時,每次遞歸調用編碼都會導致二進制數組的大小增加(我認爲它應該在每次方法返回時超出範圍)。下面是使用二進制作爲字符串的示例輸出運行,然後作爲一個數組。有人能解釋爲什麼發生這種情況嗎
string
00000,
00001,
0001,
001,
01000,
01001,
0101000,
01010010
array
00000,
000001,
0000011,
00000111,
000001111000,
0000011110001,
00000111100011000,
0000011110001100010
感謝您的解釋! –