gpt4 book ai didi

algorithm - 计算两个整数序列之间的 Kendall Tau 距离的快速算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:33 31 4
gpt4 key购买 nike

<分区>

我得到两个等长的整数序列,例如

3 1 2 5 4

5 3 2 1 4

我想找到两者之间的 Kendall Tau 距离,即序列之间的反向对数。例如,我们在第一个序列中有 (3, 5)(3 在 5 之前),在第二个序列中有 (5, 3)。我做了一个快速的 O(n^2) 算法来检查数字,但是对于长度为 40,000 及以上的大序列来说,它的计算量太大了。我读到我可以计算在进行冒泡排序时的倒置次数,将第一个序列转换为第二个序列,但这又是 O(n^2)。

  unsigned short n, first[50001], second[50001], s;
int sum = 0;
cin >> n;
for(int i=1; i<n+1; i++){
cin >> first[i];
}
// in the second array exchange the actual entries in the sequence with their indices
// that way we can quickly check if a pair is inverted
for(int i=1; i<n+1; i++){
cin >> s
second[s]=i;
}
for(int i=1; i<n+1; i++){
for (int j = i+1; j < n+1; j++)
// i < j always
// when we check the indices of the respective entries in the second array
// the relationship should stay otherwise we have an inversion
if(second[first[i]]>=second[first[j]])sum++;
}

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com