Given a list of words - what would be a good algorithm for word completion in java? Tradeoffs: Speed/efficiency/memory footprint

纵饮孤独 提交于 2019-12-10 18:41:43

问题


I'm exploring the hardware/software requirements (ultimate goal is mobile Java app) for a potential free/paid application.

The application will start with this simple goal: Given a list of relevant words in a database, to be able to do word completion on a single string input.

In other words I already know the contents of the database - but the memory footprint/speed/search efficiency of the algorithm will determine the amount of data supported.

I have been starting at the beginning with suffix-based tree searches, but am wondering if anyone has experience with the speed/memory size tradeoffs of this simple approach vs. the more complex ones being talked about in the conferences.

Honestly the initial application only has probably less than 500 words in context so it might not matter, but ultimately the application could expand to tens of thousands or hundreds of thousands of record - thus the question about speed vs. memory footprint.

I suppose I could start with something simple and switch over later, but I hope to understand the tradeoff earlier!


回答1:


Word completion suggests that you want to find all the words that start with a given prefix.

Tries are good for this, and particularly good if you're adding or removing elements - other nodes do not need to be reallocated.

If the dictionary is fairly static, and retrieval is important, consider a far simpler data structure: put your words in an ordered vector! You can do binary-search to discover a candidate starting with the correct prefix, and a linear search each side of it to discover all other candidates.



来源:https://stackoverflow.com/questions/1248921/given-a-list-of-words-what-would-be-a-good-algorithm-for-word-completion-in-ja

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!