1

我想在顶点数组上运行收缩算法 n^2 次,以计算图形的最小割。在第一次 for 循环迭代之后,数组被更改,剩余的迭代使用更改后的数组,这不是我想要的。如何模拟指针以便在每次 for 循环迭代期间拥有原始输入数组?

  def n_squared_runs(array):
        min_cut, length = 9999, len(array) ** 2
        for i in range(0, length):
            # perform operation on original input array
            array = contraction(array)
            if len(array) < min_cut:
                min_cut = len(array)
        return min_cut
4

2 回答 2

1

然后该contraction()操作应该创建并返回一个新数组,而不是就地修改它作为参数接收的数组 - 您还应该为返回的数组使用不同的变量名称,如果array同时使用命名参数和本地变量,参数将在函数内部被覆盖。

这与指针无关,而与正在使用的函数的协定有关。如果必须保留原始array文件,则辅助函数需要确保强制执行此限制。请注意,如果你这样做,在 Python 中:

array = [1, 2, 3]
f(array)

array函数接收到的与f在其“外部”声明的相同 - 事实上,f接收的只是对数组的引用,而不是它的副本 - 所以自然地,您在内部对数组所做的任何修改f都会反映在外部. 此外,值得指出的是,Python 中的所有参数都是按值传递的,并且该语言中没有指针或引用传递之类的东西。

于 2013-07-27T18:39:33.510 回答
1

不要覆盖原始数组。

  def n_squared_runs(array):
        min_cut, length = 9999, len(array) ** 2
        for i in range(0, length):
            # perform operation on original input array
            new_array = contraction(array)
            if len(new_array) < min_cut:
                min_cut = len(new_array)
        return min_cut
于 2013-07-27T18:41:02.613 回答