Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何在m*n矩阵中找到每行(m)与O(m(logm+logn))顺序一致的第k个元素_Algorithm_Matrix_Data Structures - Fatal编程技术网

Algorithm 如何在m*n矩阵中找到每行(m)与O(m(logm+logn))顺序一致的第k个元素

Algorithm 如何在m*n矩阵中找到每行(m)与O(m(logm+logn))顺序一致的第k个元素,algorithm,matrix,data-structures,Algorithm,Matrix,Data Structures,假设我们有一个m*n矩阵,每一行都是有序的。所以,我只知道这个问题的最佳算法顺序是omlogm+logn。 这是一道测试题,结果是这样的 但是我不知道这个算法是如何工作的一个想法可能是这样的 如果我问你,一个给定的数字x在原始矩阵中的秩是多少?你如何回答这个问题? 一个答案是: 只需对每行上第一次出现的x或更大的元素进行二进制搜索。然后添加各个等级 int rank = 1; for (int i = 0; i < m; ++i) { rank += std::lower_boun

假设我们有一个m*n矩阵,每一行都是有序的。所以,我只知道这个问题的最佳算法顺序是omlogm+logn。 这是一道测试题,结果是这样的
但是我不知道这个算法是如何工作的

一个想法可能是这样的

如果我问你,一个给定的数字x在原始矩阵中的秩是多少?你如何回答这个问题? 一个答案是:

只需对每行上第一次出现的x或更大的元素进行二进制搜索。然后添加各个等级

int rank = 1;
for (int i = 0; i < m; ++i) {
    rank += std::lower_bound(matrix[i].begin(), matrix[i].end(), x);
}
这可以在n个大小的数组上的Om*log n timem二进制搜索中完成。 现在我们只需要在0和INT_MAX或矩阵[0][k]之间对xB进行二进制搜索,以找到第k个秩。由于INT_MAX是常数,因此理论上总的时间复杂度为Om*logn。一个优化可以使用智能范围代替矩阵[i]。开始,矩阵[i]。结束


PS:仍然在想Om*log m+log n或O m*log mn解决方案。

你还没有说问题出在哪里。我也不清楚行的顺序是什么意思。每一行都是按顺序排序的,而不是按列排序的。我们想在这个矩阵中找到第k个元素你确定可以在Omlog m+log n中找到吗?这绝对可以在Om+nlog m中完成。我确信这是可能的,我认为这个问题是从一个article@SomeDude,请问什么是Om+nlog m解决方案?不确定为什么要计算排名?没有给定的元素,您需要根据OP从矩阵中的所有元素计算第k个最小元素。否?@SomeDudeExactly@v78你的解决方案不是correct@SomeDude,我在上面创建了一个x的子问题秩,x是其中的一个参数,并使用它通过对x进行二进制搜索来解决ur问题,