2013-04-23 226 views
1

我正在寫一個程序,將創建摩爾斯電碼字母的二叉樹(以及一段和一個單引號),然後將讀取一行莫爾斯編碼並將其翻譯成英文。 (是的,我知道查找表會更容易,但我需要理清我的二叉樹)。我認爲我的問題很大一部分是我想按字母順序將值放入樹中,而不是按符號順序。但是肯定有辦法做到這一點?因爲如果我有一百萬個不是數字的這樣的值,我不需要將它們分類爲最簡單的插入順序......對嗎?的Python - 莫爾斯電碼翻譯通過二叉樹

它的閱讀從一個文本文件,其中每行有在莫爾斯電碼一句話。 - .... .. .. .. ..-。 ..- - 。例如,這是「這很有趣」。 符號間的1個空格表示它是一個新字母,2個空格表示它是一個新單詞。

現在,我得到了上面給出的那一行的輸出「。$$$」,這意味着它正在讀取一段時間,然後得到一個由('$$$')符號表示的錯誤,它顯然是不對的......

就像我之前說的,我知道我是複雜的,但肯定有一種方法可以做到這一點,不必先把我的樹排序的價值觀,我想這出現,而不是當我處於時間緊縮狀態時。

有沒有人有任何見解?這是非常明顯的東西,我應該爲此而感到尷尬嗎?

回答

3

歡迎SO和一個有趣的問題表示感謝。是的,它看起來像你過分複雜一點。例如,這裏絕對不需要使用類。您可以重用現有的Python數據結構來表示一棵樹:

def add(node, value, code): 
    if code: 
     add(node.setdefault(code[0], {}), value, code[1:]) 
    else: 
     node['value'] = value 

tree = {} 
for value, code in alphabet: 
    add(tree, value, code) 

import pprint; pprint.pprint(tree)  

這給你的鑰匙.-value這將是更容易使用嵌套的字典。

+0

謝謝! 但我已經想出瞭如何用字典來做這種事情。我現在正在做一個鏈接列表的學習,我不明白爲什麼它不適用於這樣的鏈接...是否有一些固有的缺陷與我不知道的「whatsits」相關聯關於,還是我的實現是關閉的? 我已經想通了鏈表和如何插入一些值到他們當中沒有得到一切混亂的,所以我不明白爲什麼我在與一些似乎很類似我這樣的問題... 還有什麼提示?或者我應該完全放棄這種方法嗎? – user2309856 2013-04-23 13:05:58

+0

@ user2309856:我個人不認爲學習「鏈表」和其他低級數據結構有什麼實際價值。在高級語言中,這種東西已經提供給你。我的建議:學習如何在簡單但真實的問題上編寫好的慣用python。例如,您的摩爾斯電碼解碼器 - 正如您正確指出的那樣,查找表是最好的方法,並且不會超過5行代碼。問題解決了,直到下一個。 – georg 2013-04-23 13:35:39