我想創造一個空間和時間有效的實現Java中的常見字字典。時空高效字典實現
字典,而不是從AZ排序,將以某種方式將包含字母「A」,「B」等的所有單詞組合在一起。應用程序需要能夠刪除包含用戶輸入的任何字母的所有單詞。因此,如果用戶輸入「L」,則包含「L」的所有單詞都被刪除。
我已經創建:
集< String>的字典 - 存儲所有的話。
地圖<字符,集<字符串>> - 映射字符A到Z各自具有包含所有從字典包含該信詞的集合。
實施例:
dictionary {"AAB", "ABB", "BBC", "BBA", "CBB"}
地圖:
A - "AAB", "ABB", "BBA"
B - "AAB", "ABB", "BBC", "BBA", "CBB"
C - "BBC", "CBB"
如果用戶選擇「A」,該組A的,從字典移除和地圖被重建,等待用戶移除另一封信。
我的問題是,這將導致巨大的數據重複和低效。我想不出另一種有效實現這一點的方法。我一直在暗示,樹木可能是解決此問題的方法,但我看不到自己的實現怎麼會在這兩個時間&空間效率更高。
非常感謝您的幫助。
似乎是確定的,只是繼續它。沒有重複,因爲所有集合都會引用相同的字符串對象(單詞)。你也可以通過使用Lists而不是Sets來減少開銷。 – unbeli
使用一棵樹,每個數據節點包含它下面的節點列表。你會有一個A節點,它下面有AB,AC,AA和AD。通過這種方法可以屏蔽掉所有A字,只需刪除A節點即可。過濾掉所有的廣告語,刪除廣告節點,等你將不得不編寫這個自己,我相信,但它應該是有效的。 – Sheriff
基數樹? http://en.wikipedia.org/wiki/Radix_tree – maximdim