修改合并排序以计算反转次数

问题描述

请先阅读此内容,然后再将其标记为重复! -这与实际修改无关,而是与检查是否已计算出特定的反转有关。

因此,在流行的CLRS的算法入门书中有一个问题,要求您修改合并排序以计算数组中的反转数。作者还慷慨地为这个问题2-4 here提供了解决方案,我在下面附上了其屏幕截图:

The MergeSort recursive function

The Merge function

我的问题:在第二张屏幕截图中,作者使用了布尔值counted = FALSE来检查某个值R[j]的特定j对应的反转是否已经已经算不算。因为这个原因,我感到很困惑,因为我认为这是多余的。

我们在这里计算倒置量

    if counted == FALSE and R[j] < L[i]   
        inversions = inversions + n1 - i + 1
        counted = TRUE 

如此计数仅在R[j] < L[i]时为 TRUE ,这也是下面的else部分:

    ...
    else
        A[k] = R[j]
        j = j + 1
        counted = FALSE
    

因此,只要我们有R[j] < L[i],我们就将R[j]复制到A[k]中,并将j的值加1,这样可以确保我们永远不会遇到前一个{{1 }}再次进入循环。在我看来,这使R[j]布尔值变得多余。

或者还有其他东西吗?如果我们删除counted布尔值,是否有任何特定的示例会中断:

counted

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)