试图了解排列生成

时间:2018-09-04 11:08:33

标签: c algorithm data-structures permutation backtracking

我正在尝试了解给定here的置换算法 我不清楚的是他们提到的第一段伪代码

array = [1, 2, 3, 4]
function permutation(start, end):
#i will go from start to end
    for i -> (start, end+1):
        permutation(start+1,end)

为什么在我的循环中使用了end + 1,据我所知,据我所知,end + 1应该超出必须应用置换的数组的索引,但这不是这种情况我不清楚。

2 个答案:

答案 0 :(得分:1)

作者熟悉Python,并在伪代码中使用相同的(不幸的)惯用法。在Python中,范围的开头是 inclusive ,而结尾是 exclusive 。稍后在该页面上,Python代码摘录证明确实如此:

for i in range(start, end+1):

使用此代码,i将依次分配从startend(包括端值,但不包括end + 1)的所有整数。

在C语言中,人们经常会在循环中使用<,然后它也会在循环中发生:

for (size_t i = start; start < end + 1; start++)
                               ^^^^^^^

更自然的是写

for (size_t i = start; start <= end; start++)

答案 1 :(得分:0)

for i -> (start, end+1)

这意味着从 start 开始的每个值都进行迭代,并且自动递增且条件满足 end + 1

permutation(start+1,end)

这是相同的函数调用,其参数具有开始和结束的值

例如

function permutation(start, end) 

开始= 1,结束= 10

inside foreach将从1开始以自动递增的方式进行迭代,直到达到10,意味着小于(10 + 1)= 11

然后,置换(开始+1,结束)被调用 假设第一个项目start =1。它将以start为2并以10为结束