Heim  >  Artikel  >  Web-Frontend  >  JavaScript全排列的六种算法 具体实现_javascript技巧

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

WBOY
WBOYOriginal
2016-05-16 17:30:531036Durchsuche

全排列是一种时间复杂度为: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

 
 
 


算法二:链接(递归)
复制代码 代码如下:

 
 
     
    Full Permutation(Recursive Link) - Mengliao Software 
 
 

Full Permutation(Recursive Link)
 
Mengliao Software Studio - Bosun Network Co., Ltd.
 
2012.03.29

 
 
 


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

 
 
     
    Full Permutation(Recursive Backtrack) - Mengliao Software 
 
 

Full Permutation(Recursive Backtrack)
 
Mengliao Software Studio - Bosun Network Co., Ltd.
 
2012.03.29

 
 
 


算法四:回溯(非递归)
复制代码 代码如下:

 
 
     
    Full Permutation(Non-recursive Backtrack) - Mengliao Software 
 
 

 
Full Permutation(Non-recursive Backtrack)
 
Mengliao Software Studio - Bosun Network Co., Ltd.
 
2012.03.29

 
 
 


算法五:排序(非递归)
复制代码 代码如下:

 
 
     
    Full Permutation(Non-recursive Sort) - Mengliao Software 
 
 

 
Full Permutation(Non-recursive Sort)
 
Mengliao Software Studio - Bosun Network Co., Ltd.
 
2012.03.30

 
 
 


算法六:求模(非递归)
复制代码 代码如下:

 
 
     
    Full Permutation(Non-recursive Modulo) - Mengliao Software 
 
 

Full Permutation(Non-recursive Modulo)
 
Mengliao Software Studio - Bosun Network Co., Ltd.
 
2012.03.29

 
 
 


上面的六种算法有些是对位置进行排列,例如回溯、排序等,因为这样可以适应各种类型的元素,而非要求待排列元素一定是数字或字母等。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn