std:find() 排序与未排序
std:find() for sorted vs unsorted
考虑两个整数向量 v1
和 v2
,其中 v1
已排序,而 v2
未排序。使用 find()
在这两个向量中搜索元素的时间复杂度是多少?
std::find()
performs linear search,即逐个元素查找,直到找到要查找的值。无论集合是否排序,它都是线性的。
如果您有一个已排序的向量,您可能需要考虑改为执行 binary search with std::lower_bound()
。这将是向量大小的对数。
std::find
的时间复杂度永远是线性 O(n),因为它不知道 std::vector
。它必须将向量视为 non-sorted 并对所有元素执行线性搜索。
然而,real-time可能视情况而定。排序可能会有所帮助,因为 std::find
可以更快结束。这取决于你在寻找什么。假设您要在 non-sorted 数组 (5,1,3,4,2)
中查找 2
- 您必须比较所有元素。但是对于排序的 (1,2,3,4,5)
- 你只比较两个元素并找到 2
.
考虑两个整数向量 v1
和 v2
,其中 v1
已排序,而 v2
未排序。使用 find()
在这两个向量中搜索元素的时间复杂度是多少?
std::find()
performs linear search,即逐个元素查找,直到找到要查找的值。无论集合是否排序,它都是线性的。
如果您有一个已排序的向量,您可能需要考虑改为执行 binary search with std::lower_bound()
。这将是向量大小的对数。
std::find
的时间复杂度永远是线性 O(n),因为它不知道 std::vector
。它必须将向量视为 non-sorted 并对所有元素执行线性搜索。
然而,real-time可能视情况而定。排序可能会有所帮助,因为 std::find
可以更快结束。这取决于你在寻找什么。假设您要在 non-sorted 数组 (5,1,3,4,2)
中查找 2
- 您必须比较所有元素。但是对于排序的 (1,2,3,4,5)
- 你只比较两个元素并找到 2
.