2016-03-03 173 views
0

我目前正在做一些shearSorting,并且无法弄清当这个操作应该用n×n矩阵完成。如何知道什么时候ShearSorting完成

我现在正在做的是我将循环的每次迭代开始时的矩阵复制到临时矩阵,然后在循环的每次迭代结束时,我将原始和温度矩阵,如果它们是相同的,那么我会跳出循环并退出。我不喜欢这种方法,因为我们总是在分类和完成矩阵之后经历一次额外的迭代,这会浪费CPU时间和周期。

必须有更好的方法来做这个检查。我一直发现引用log(n)来表示我们需要多少次迭代,但我不相信它们意味着实际log(n)为log(5),对于0.69中的5x5矩阵,迭代次数是不可能的。

有什么建议吗?

回答

0

因此,我知道shearSort需要log(n)运行迭代才能完成,因此对于5x5矩阵的情况,我们将有3次运行的行和3次运行的列。但是,如果我给出的5x5矩阵几乎被排序并且只需要一到两次迭代即可完成,那么我认为在6次迭代中看不到点,因为这被认为是CPU功率的浪费和周期。

此外,我们有以下解决方案:如果我们将shearSort函数的每次迭代开始时的矩阵复制到临时矩阵,并且在每次迭代结束时我们将两个矩阵比较在一起,它们是相同的,那么我们知道我们完成了(注意这里迭代意味着行和列排序,因为矩阵可能最初不需要行排序,但是需要列排序)。在这种情况下,如果矩阵不需要N + 1次迭代,我们将保留CPU周期,但是这种解决方案会提供一个问题,即当需要N + 1次迭代时,我们将进行N + 3次迭代来完成额外的2次迭代将是检查2个矩阵对于行是否相同以及对于列是否相同)。

为了解决这个问题,我们将不得不使用这两种解决方案的组合:

我们仍然会复制在启动矩阵,并在最后比较临时矩阵,如果它们相等之前我们得到的N + 1次迭代,那么我们就完成了,不需要再继续下去了,如果它们不是,那么我们进入N + 1迭代并停止,因为我们知道此时矩阵应该在N + 1之后排序迭代。

相关问题