如何知道ShearSorting何时完成

时间:2016-03-03 21:22:34

标签: sorting shearsort

我正在做一些shearSorting,并且无法弄清楚这个操作应该用n x n矩阵完成。

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

要解决这个问题,我们必须使用两种解决方案的组合:

我们仍然会在开始时复制矩阵并将其与最终的temp矩阵进行比较,如果它们在我们进行N + 1次迭代之前相等,那么我们就完成了,不需要再继续了,如果它们不是,那么我们进入N + 1迭代并停止,因为我们知道此时矩阵应该在N + 1次迭代后进行排序。

相关问题