Hanoi Tower - Python

493 days ago by admin

# 하노이의 탑 # 입력: 옮기려는 원반의 갯수 n # 옮길 원반이 현재 있는 출발점 기둥 from_pos # 원반을 옮길 도착점 기둥 to_pos # 옮기는 과정에서 사용할 보조 기둥 aux_pos # 출력: 원반을 옮기는 순서 def hanoi(n, from_pos, to_pos, aux_pos): if n == 1: # 원반 한 개를 옮기는 문제면 그냥 옮기면 됨 print(from_pos, "->", to_pos) return # 원반 n - 1개를 aux_pos로 이동(to_pos를 보조 기둥으로) hanoi(n - 1, from_pos, aux_pos, to_pos) # 가장 큰 원반을 목적지로 이동 print(from_pos, "->", to_pos) # aux_pos에 있는 원반 n-1개를 목적지로 이동(from_pos를 보조 기둥으로) hanoi(n - 1, aux_pos, to_pos, from_pos) print("n = 1") hanoi(1, 1, 3, 2) # 원반 한 개를 1번 기둥에서 3번 기둥으로 이동(2번을 보조 기둥으로) print("n = 2") hanoi(2, 1, 3, 2) # 원반 두 개를 1번 기둥에서 3번 기둥으로 이동(2번을 보조 기둥으로) print("n = 3") hanoi(3, 1, 3, 2) # 원반 세 개를 1번 기둥에서 3번 기둥으로 이동(2번을 보조 기둥으로) 
       
n = 2
(1, '->', 2)
(1, '->', 3)
(2, '->', 3)
n = 1
(1, '->', 3)
n = 3
(1, '->', 3)
(1, '->', 2)
(3, '->', 2)
n = 1
(1, '->', 3)
(1, '->', 3)
(2, '->', 1)
(2, '->', 3)
(1, '->', 3)
n = 1
(1, '->', 3)
n = 1
(1, '->', 3)
n = 2
(1, '->', 2)
(1, '->', 3)
(2, '->', 3)
n = 1
(1, '->', 3)
n = 3
(1, '->', 3)
(1, '->', 2)
(3, '->', 2)
n = 1
(1, '->', 3)
(1, '->', 3)
(2, '->', 1)
(2, '->', 3)
(1, '->', 3)
n = 1
(1, '->', 3)
n = 1
(1, '->', 3)
# Linear Algebra import numpy as np from scipy import linalg 
       
# Build array/vector: A = np.array([[1,2],[3,4]]) A 
       
array([[1, 2],
       [3, 4]])
array([[1, 2],
       [3, 4]])
# Build array/vector: b = np.array([[5,6]]) #2D array b 
       
array([[5, 6]])
array([[5, 6]])
A*b #not matrix multiplication! 
       
array([[ 5, 12],
       [15, 24]])
array([[ 5, 12],
       [15, 24]])
b = np.array([5,6]) #1D array b 
       
array([5, 6])
array([5, 6])
#Finding Inverse A = np.array([[1,3,5],[2,5,1],[2,3,8]]) A 
       
array([[1, 3, 5],
       [2, 5, 1],
       [2, 3, 8]])
array([[1, 3, 5],
       [2, 5, 1],
       [2, 3, 8]])
#Finding Inverse linalg.inv(A) 
       
array([[-1.48,  0.36,  0.88],
       [ 0.56,  0.08, -0.36],
       [ 0.16, -0.12,  0.04]])
array([[-1.48,  0.36,  0.88],
       [ 0.56,  0.08, -0.36],
       [ 0.16, -0.12,  0.04]])
#Finding Inverse A.dot(linalg.inv(A)) #double check 
       
array([[  1.00000000e+00,   1.11022302e-16,  -1.66533454e-16],
       [ -1.38777878e-16,   1.00000000e+00,  -3.46944695e-17],
       [ -2.22044605e-16,   3.33066907e-16,   1.00000000e+00]])
array([[  1.00000000e+00,   1.11022302e-16,  -1.66533454e-16],
       [ -1.38777878e-16,   1.00000000e+00,  -3.46944695e-17],
       [ -2.22044605e-16,   3.33066907e-16,   1.00000000e+00]])
# Data Management in Python # Linear algebra in Python https://datascienceplus.com/linear-algebra-in-python/