当前位置:Gxlcms > JavaScript > JavaScript全排列的六种算法具体实现_javascript技巧

JavaScript全排列的六种算法具体实现_javascript技巧

时间:2021-07-01 10:21:17 帮助过:16人阅读

全排列是一种时间复杂度为:O(n!)的算法,前两天给学生讲课,无意间想到这个问题,回来总结了一下,可以由7种算法求解,其中动态循环类似回溯算法,实现起来比较繁琐,故总结了6种,以飨读者。所有算法均使用JavaScript编写,可直接运行。
算法一:交换(递归)
代码如下:




Full Permutation(Recursive Swap) - Mengliao Software


Full Permutation(Recursive Swap)

Mengliao Software Studio - Bosun Network Co., Ltd.

2011.05.24


输出一个排列。
*/
var count=0;
function show(arr) {
document.write("P"+ ++count+": "+arr+"
");
}
function perm(arr) {
(function fn(source, result) {
if (source.length == 0)
show(result);
else
for (var i = 0; i < source.length; i++)
fn(source.slice(0, i).concat(source.slice(i + 1)), result.concat(source[i]));
})(arr, []);
}
perm(["e1", "e2", "e3", "e4"]);




算法三:回溯(递归)
代码如下:




Full Permutation(Recursive Backtrack) - Mengliao Software


Full Permutation(Recursive Backtrack)

Mengliao Software Studio - Bosun Network Co., Ltd.

2012.03.29