c# – 如何使用字符串列表进行查找?
我有一个字符串列表(List< String>),可以有1到6个条目.我希望能够做的是使用该字符串列表进行查找,但我希望可能的查找能够使用这些字符串中的2个或更多的任意组合来进行查找.我正在使用Dictionary< List< String>,String>目前.
恩. List<String>(){"fire","aero"},"searing wind" List<String>(){"fire","aero","thunder"} "firestorm" List<String>(){"aero","thunder"},"storm" List<String>(){"aero","water","blizzard"},"snowstorm" List<String>(){"aerora","blizzara"},"hailstorm" 我希望查找返回前4个条目,因为我的基本列表包含查找它们所需的所有值.我还需要能够知道用于执行查找的值,因为稍后需要从基本列表中清除这些值.字典中的条目数可能约为400 我可以想到一种详尽的方法来进行这种查找,但是因为在执行查找时订单会变得很重要,所以需要花时间来进行所有排列并查找它们.我可以在字典键列表中强制执行字母顺序,如果这样做有帮助的话.有没有人知道更好的方法来做到这一点,或者可能是一种不同的,更有效的方法来做到这一点?我已经在这个程序中使用了sqlite来处理其他一些东西,所以如果这样可以让我更快地查找,我可以使用它. 谢谢 解决方法
您可能想要探索的一个选项是使用
decision tree.这个想法就是这样的.选择一些任意字符串,然后将所有集合拆分为两组 – 包含该字符串的组和不包含该字符串的组.然后,在两个组上递归重复此过程,并根据您做出的所有决策构建树.例如,让我们为您的符号引入一个简写:
A = Aero R = Aerora F =火 T =迅雷 W =水 B =暴雪 然后你可以像这样构建一棵树: start --> A? -- NO --> R? -- YES --> B? -- YES --> "hailstorm" | +--- YES --> F? -- YES --> T? -- YES --> "firestorm" | | | +----- NO --> "searing wind" | +----- NO --> T? -- YES --> "storm" | +----- B? -- YES --> "snowstorm" 一旦你有了这样的树,你就可以将你的属性存储为一组字符串,然后按如下方式查找所有匹配项.从树的根开始,查看给定节点指示的字符串.如果该字符串包含在您的字符串集中,则递归地继续沿YES分支查找树的该部分中的所有匹配项.然后,无论您是否向下看该分支,都可以向下探索NO分支以获取可与您的查询匹配的所有其他字符串. 这种方法的优点是,假设您有少量字符串作为关键字,树的深度可以非常小 – 对于k个关键字最多为O(k) – 因此在最佳情况下,您的搜索将采用O(k)时间很少.在最坏的情况下,您只需要探索整个树,这需要花费时间O(n).此外,使用机器学习技术,可以构建一个非常好的树结构,它将在大小和查找速度之间进行可靠的权衡. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |