gpt4 book ai didi

c - 试图理解 Knuth 的排列算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:24 25 4
gpt4 key购买 nike

<分区>

我最近在我的一门算法类(class)中被指示使用 Knuth 的算法来创建存储在 malloc 数组中的排列。

这是设置:

array 是指向保存排列的分配数组的指针。它最初存储 n 个值,每个位置保存索引 + 1。

因此,如果 n 为 10,则数组最初为:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

“rand”变量保存从 1 到 n 的一些变量。 (在这个例子中,1-10)。

Swap 应该是一个执行位异或交换 (XOR) 的函数。

最终结果应该是 1-n 的某种排列。

所以 [5, 6, 2, 8, 7, 4, 1, 3, 10, 9] 作为一种可能的排列是有效的。

但是,[1, 1, 5, 7, 8, 2, 3, 5, 5, 6] 无效,因为它不是排列。它有重复项。

但是我无法理解我们被告知要使用的这段代码:

for(i = 1; i < n; i++) {
swap(&array[i], &a[rand]);
}

所以我们从数组的第二个元素开始。 (i = 1)

然后我们尝试对两个参数进行异或运算:

首先:&array[i]

这是指向分配数组的指针的地址。 (双指针,对吧?)

第二个参数是完全一样的。指向分配数组的指针的地址。

我到底应该如何以及为什么要对地址进行异或运算?

我不明白什么?

感谢所有帮助!

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