我需要对一组项目进行查找操作。
首先,我需要查看是否存在直接匹配项。这很简单,因为我有一个条目在
但是,如果没有直接匹配项,则需要执行以某个值开头的匹配,但必须返回最长的匹配项:
记录示例:
有没有在框架中有哈希或树结构的类来实现这样的功能,还是我需要自己编写?目前我所做的是按模式字符串长度排序列表,然后逐个检查条目以查看查询是否以记录开头。对于大多数情况,这种方法效果不错,因为我们没有很长的列表(但),但在没有匹配项的情况下会产生昂贵的成本。我缺乏词汇来让谷歌给我与哈希集、列表和字典无关的页面。我找到的所有研究都指向基于树的结构,但没有指出.NET Framework中是否已经有了实现。
首先,我需要查看是否存在直接匹配项。这很简单,因为我有一个条目在
Dictionary<String,MyObjectType>
中,所以我只需要执行 dictionary["valuetofind"]
。但是,如果没有直接匹配项,则需要执行以某个值开头的匹配,但必须返回最长的匹配项:
记录示例:
String Record
0 A
01 B
012 D
02 B
03 C
查询示例:
Query Result
0 A - Because 0 is the longest match
01 B - Because 01 is the longest match
023456 B - Because 02 is the longest match
012 D - Because 012 is the longest match
0123456 D - Because 012 is the longest match
03456 C - Because 03 is the longest match
04 A - Because 0 is the longest match
0456 A - Because 0 is the longest match
1 Null - No Match
有没有在框架中有哈希或树结构的类来实现这样的功能,还是我需要自己编写?目前我所做的是按模式字符串长度排序列表,然后逐个检查条目以查看查询是否以记录开头。对于大多数情况,这种方法效果不错,因为我们没有很长的列表(但),但在没有匹配项的情况下会产生昂贵的成本。我缺乏词汇来让谷歌给我与哈希集、列表和字典无关的页面。我找到的所有研究都指向基于树的结构,但没有指出.NET Framework中是否已经有了实现。
O(n^2 logn)
。使用Trie树可能会更好,只需要O(n logn)
的时间复杂度。 - leppie