2016-04-29 85 views
6

UPD:我搬到原來的問題,以https://codereview.stackexchange.com/questions/127055/building-tree-graph-from-dictionary-performance-issuesPHP的前綴樹實現還是assoc命令陣列

這裏是一個短版,無碼。

我想從字典中建立一個前綴樹。因此,使用以下字典'and','anna','ape','apple',圖應如下所示: graph 我試過2種方法:使用關聯數組並使用自寫的樹/節點類。

注意:原始字典約8 MB,包含> 600000字。

問題:有什麼好的(快速/高效)的方式來做到這一點?

我試過到目前爲止:

  • PHP關聯數組(它們不是與此圖今後的工作非常靈活)。

  • 自寫的Tree/Node類(性能問題 - 執行時間上升高達7倍,內存使用量增加2倍,即使沒有實現任何內容,除了inserting函數)。

示例代碼可在代碼審查(有問題的第一個鏈接)

+0

它們都具有相同的代碼/執行復雜性,而不是相同的內存佔用空間和執行速度。根據PHP版本的不同,你可以使用更多或更少的內存。如果你正在尋找更好的表現,而不僅僅是學習東西,我會建議尋找嵌套。你會發現準備使用PHP的實現:http://stackoverflow.com/questions/272010/searching-for-the-best-php-nested-sets-class-pear-class-excluded –

+2

這個問題更適合[代碼審查](http://codereview.stackexchange.com) – nickb

+0

@Sergiu Paraschiv - 我會調查它 – haldagan

回答

0

只要我切換到C++,並得到了很好的答案上codereview,我就回答我的問題這裏。

還有一種方法可以通過增加內存使用量來提高時間效率(與「array」的arrayarray s」方法相比,這並不是真正的大幅增加)。該方法被稱爲「雙數組特里」,您可以閱讀有關此主題here的信息,並閱讀codereview上的上述答案以查看實現示例。

它更省時,但與未使用OOP方法相比,它可以減少未來使用trie的靈活性/便利性。

所以這個問題對我的最終答案是:「PHP不是與真正的大嘗試一起工作的最佳工具」。