我有一个像这样的记录(结构)列表:
struct Rec
{
int WordID;
int NextID;
int PrevID;
}
List<Rec>= New List<Rec>(){...};
我需要一种方法在List中找到“Rec”类型的值而不搜索所有记录,如二进制搜索。我希望它的时间复杂度小于O(n)
答案 0 :(得分:2)
搜索列表中项目的最佳方法当然是没有列表但是有哈希表。
如果您有字典而不是列表(或字典和列表),您可以在averaged \ amortized O(1)中搜索确切的值。
您也可以使用二进制搜索,但仅当列表已排序时,方法为List<T>.BinarySearch
,搜索为O(log n)。
使用n个项目对列表进行排序为O(n log n)。 在哈希表中插入n个项目的平均值为O(n),插入项目的平均值为O(1)。 这意味着同时创建哈希表(或保持哈希表与列表同步)将比排序列表更快。 但是请考虑哈希表消耗更多内存,因为它们必须在内部保留一个桶阵列。
答案 1 :(得分:1)
您可以使用二进制搜索,只需对列表进行排序。