搜索列表中的记录而不扫描所有记录

时间:2011-11-05 09:31:15

标签: c# list data-structures struct

我有一个像这样的记录(结构)列表:

struct Rec
{
     int WordID;
     int NextID;
     int PrevID;
}

List<Rec>= New List<Rec>(){...};

我需要一种方法在List中找到“Rec”类型的值而不搜索所有记录,如二进制搜索。我希望它的时间复杂度小于O(n)

2 个答案:

答案 0 :(得分:2)

搜索列表中项目的最佳方法当然是没有列表但是有哈希表。

如果您有字典而不是列表(或字典和列表),您可以在averaged \ amortized O(1)中搜索确切的值。

您也可以使用二进制搜索,但仅当列表已排序时,方法为List<T>.BinarySearch,搜索为O(log n)。

使用n个项目对列表进行排序为O(n log n)。 在哈希表中插入n个项目的平均值为O(n),插入项目的平均值为O(1)。 这意味着同时创建哈希表(或保持哈希表与列表同步)将比排序列表更快。 但是请考虑哈希表消耗更多内存,因为它们必须在内部保留一个桶阵列。

答案 1 :(得分:1)

您可以使用二进制搜索,只需对列表进行排序。