比较两个排序的数字向量(性能优先)

Compare two sorted vector of numbers (Performance being priority)

本文关键字:性能 向量 数字 排序 两个 比较      更新时间:2023-10-16

我正在尝试探索是否有更好的方法来比较两个相同大小的向量。

意图:我有一vectorvectors名叫table。每个vector的大小相同。它们由从0-1000.

在这种情况下,对名为table的数据结构进行排序的方式会推荐什么?在这里,排序是指正在排序的tabletable的每个元素都已排序。比较vector v1vector v2的标准(词典比较)。v1小于v2当且仅当第一个索引处的值lv1[l] != v2[l],它v1[l] < v2[l]保存属性。

目前,我正在使用以下代码片段。我相信从vectors全部排序的事实中会有一种更有效的方法。此外,table中每个vector的大小大致约为4-10.

std::vector<std::vector<int>> table;
/* code that populates vector named table */
std::sort(table.begin(), table.end(), [](const std::vector<int>& lhs, const std::vector<int>& rhs) { return lhs < rhs; });

vectoroperator<执行字典顺序比较,即它查看两个vectors中不同的第一个位置,并执行该位置的值比较。这是最好的,对vectors进行排序不会使其更有效率。您可以编写自己的比较函数(与operator<相反)假设vectors大小相等,但我怀疑这是否值得付出努力。

编辑:一些解释为什么这是最佳的(在某种意义上):鉴于向量的顺序应该基于它们的内容,你必须检查至少一个位置。你比较这个位置的值,如果它们不相等,你就完成了。如果没有,您别无选择,只能检查另一个位置,依此类推。这里唯一可以优化的是检查位置的顺序,尝试首先检查变化更强烈的位置。当然,如果可能,这取决于您的用例。如果你对向量进行排序的频率远远高于对向量的更改频率,你也可以为每个向量计算某种哈希值并比较它们。

另一个编辑:实际上你可以做一件小事:如果你按排序顺序浏览向量并遇到你的向量可以包含的最大可能值,你不必检查任何进一步的位置,因为它们无论如何都是相等的。因此,第一个向量不能更小。这是向量排序的唯一情况,可以预测尚未检查的所有位置的值,因此不应有任何进一步的优化。