我决定学习并发性,并想了解来自两个不同进程的指令有多少种重叠方式。这两个过程的代码只是一个 10 次迭代循环,每次迭代执行 3 条指令。我发现问题在于将 X 指令固定在一个点上,然后在空间之间拟合来自其他进程的其他 X 指令,同时考虑到它们必须是有序的(进程 B 的指令 4 必须始终位于指令 20 之前)。
我编写了一个程序来计算这个数字,查看结果我发现解决方案是 n 组合 k,其中 k 是在一个进程的整个循环中执行的指令数,因此对于 10 次迭代,它将是 30,并且n 为 k*2(2 个进程)。换句话说,n 个对象的 n/2 是固定的,并且必须在空间中适合 n/2,而后者的 n/2 不会失去它们的顺序。
好的问题解决了。不,不是。我不知道为什么会这样,我知道组合的定义是,您可以通过多少种方式从一组 n 中获取 k 个元素,使得所有组都不同,但您获取元素的顺序却没有没关系。在这种情况下,我们有 n 个元素,实际上我们将它们全部取走,因为所有指令都已执行 (n C n)。
如果说一个包里有 2k 个蓝色 (A) 和红色 (B) 对象来解释它,并且您从包中取出 k 个对象,那么当实际执行 2k 条指令时,您仍然只取了 k 条指令。你能解释一下吗?
提前致谢。