從網路課程 程式必修課!離散數學與演算法 來淺嚐一下沒機會在課堂上所學的離散數學與演算法。或許對撰寫程式的效能提昇會有些幫助。
課程相關資訊
[連結]:https://hiskio.com/courses/1196/lectures/133759
本篇範圍:Chapter 6
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。
內容
Hanoi Tower
有三根圓環,且有不同直徑的圓盤。一開始會在某一根柱子上,會由小到大來擺放,目的是要將所有的盤子移到最後一根柱子上,且同樣遵循由小到大來擺放。過程中,一次只能移動一個盤子,且同樣要遵循由小到大的規則。
總共的步數,會是 2 ^ n – 1 步
Coding
function hanoi (n,a,b,c) :n 代表總數;a,b,c 代表柱子
1. 如果 n === 1,將 a 的內容 pop,然後填入 c
2. 如果 n !== 1,那就是:
2-1:將 n-1 個元素從 a 移到 b : hanoi (n-1,a,c,b) ,可想成將 b,c 兩根柱子暫時互換
2-2:將 1 個元素從 a 移到 c:hanoi (1,a,b,c)
2-3:將 n-1 個元素從 b 移到 c:hanoi (n-1,b,a,c)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function hanoi ( n , a , b , c ) {
console . log ( 'processing:' , a , b , c )
if ( n === 1 ) {
c . push ( a . pop ( ) )
} else {
hanoi ( n - 1 , a , c , b )
hanoi ( 1 , a , b , c )
hanoi ( n - 1 , b , a , c )
}
}
let arr1 = [ 5 , 4 , 3 , 2 , 1 ]
let arr2 = [ ]
let arr3 = [ ]
hanoi ( 5 , arr1 , arr2 , arr3 )
console . log ( '------------' )
console . log ( arr1 )
console . log ( arr2 )
console . log ( arr3 )
系列文章
[筆記] 程式必修課!離散數學與演算法 – 9
[筆記] 程式必修課!離散數學與演算法 – 8
[筆記] 程式必修課!離散數學與演算法 – 7
[筆記] 程式必修課!離散數學與演算法 – 6
[筆記] 程式必修課!離散數學與演算法 – 5
[筆記] 程式必修課!離散數學與演算法 – 49
[筆記] 程式必修課!離散數學與演算法 – 48
[筆記] 程式必修課!離散數學與演算法 – 47
[筆記] 程式必修課!離散數學與演算法 – 46
[筆記] 程式必修課!離散數學與演算法 – 45
[筆記] 程式必修課!離散數學與演算法 – 44
[筆記] 程式必修課!離散數學與演算法 – 43
[筆記] 程式必修課!離散數學與演算法 – 42
[筆記] 程式必修課!離散數學與演算法 – 41
[筆記] 程式必修課!離散數學與演算法 – 40
[筆記] 程式必修課!離散數學與演算法 – 4
[筆記] 程式必修課!離散數學與演算法 – 39
[筆記] 程式必修課!離散數學與演算法 – 38
[筆記] 程式必修課!離散數學與演算法 – 37
[筆記] 程式必修課!離散數學與演算法 – 36
[筆記] 程式必修課!離散數學與演算法 – 35
[筆記] 程式必修課!離散數學與演算法 – 34
[筆記] 程式必修課!離散數學與演算法 – 33
[筆記] 程式必修課!離散數學與演算法 – 32
[筆記] 程式必修課!離散數學與演算法 – 31
[筆記] 程式必修課!離散數學與演算法 – 30
[筆記] 程式必修課!離散數學與演算法 – 3
[筆記] 程式必修課!離散數學與演算法 – 29
[筆記] 程式必修課!離散數學與演算法 – 28
[筆記] 程式必修課!離散數學與演算法 – 27
[筆記] 程式必修課!離散數學與演算法 – 26
[筆記] 程式必修課!離散數學與演算法 – 25
[筆記] 程式必修課!離散數學與演算法 – 24
[筆記] 程式必修課!離散數學與演算法 – 23
[筆記] 程式必修課!離散數學與演算法 – 22
[筆記] 程式必修課!離散數學與演算法 – 21
[筆記] 程式必修課!離散數學與演算法 – 20
[筆記] 程式必修課!離散數學與演算法 – 2
[筆記] 程式必修課!離散數學與演算法 – 19
[筆記] 程式必修課!離散數學與演算法 – 18
[筆記] 程式必修課!離散數學與演算法 – 17
[筆記] 程式必修課!離散數學與演算法 – 16
[筆記] 程式必修課!離散數學與演算法 – 15
[筆記] 程式必修課!離散數學與演算法 – 14
[筆記] 程式必修課!離散數學與演算法 – 13
[筆記] 程式必修課!離散數學與演算法 – 12
[筆記] 程式必修課!離散數學與演算法 – 11
[筆記] 程式必修課!離散數學與演算法 – 10
[筆記] 程式必修課!離散數學與演算法 – 1
按讚加入粉絲團
延伸閱讀