오늘은~^^* Lexicographic Order Algorithm 사전식 배열 알고리즘을 바탕으로 Travelling Salesman Problem을 해결하는 코드 작업을 시작하는 날이예요~^^*
근데요~ 제가 아침 일찍 움직여야 해서요~^^*
우리 대신 로봇이 자신의 몸을 움직여 여행을 다녀와 주면 얼마나 좋을까요~^^*
우리는요~~^^*
피와 살로 구성된 우리의 소중한 몸을 움직여 하루를 보람차게 보낼까요~^^*
힘차고 익숙한 선율에 몸을 맡겨 아침을 열고서~^^*
둠칫둠칫 편안한 리듬으로 몸을 움직이며 하루를 보내고~^^*
저녁에 다시 만날까요~^^* 보람찬 하루 끝 우리 또 만나요~^^* 쓩~^^*
네~~^^* 오늘은 제법 날씨가 따뜻해졌네요~^^*
분홍신을 신은 듯 가벼운 발끝으로 사뿐사뿐 걸었어요~^^*
겨울인 이곳의 오늘도 따뜻한데~^^*
이곳보다 적도에 더 가까운 곳은 오늘도 참 따뜻하겠죠~^^*
네~^^* 지구는 둥글고 태양은 뜨거우니까요~^^*
따뜻한 곳에서도~^^* 추운 곳에도~^^*
맑은 곳에서도~^^* 비가 오는 곳에서도~^^*
춤추듯 걷는 발걸음으로 사뿐사뿐~^^*
코딩 공부의 길을 함께 걸어가 볼까요~^^*
멋진 춤~ 멋진 음악~ 멋진 목소리~ 우뢰와 같은 박수 소리~ 들으며~^^*
오늘 하루의 피곤을 씻어내시고 계셔요~^^*
코딩 공부 정리해서 돌아올게요~^^* 쓩~^^*
네~^^* Lexicographic Order Algorithm 사전식 배열 알고리즘을 찬찬히 살펴 보겠습니다~^^*
<< 예 >>
[0][1][2][3][4][5][6][7]
0 1 2 5 6 7 4 3
1. Find the largest i such that P[i] < P[i+1].
(If there is no such i, P is the last permutation.)
2. Find the largest j such that P[i] < P[j].
3. Swap P[i] and P[j].
4. Reverse P[i+1 .. n].
1. P[i]가 P[i+1]보다 작은 경우 중 가장 큰 i를 찾으라.
=> 자신의 다음 수보다 작은 수 중에서, 순열에서 가장 멀리 놓여있는 수를 찾으라.
=>
[0][1][2][3][4][5][6][7]
0 1 2 5 6 7 4 3
=>
(6 < 7) the largestI = 4
(만약 그런 i가 없다면, 순열 P는 가장 마지막 경우가 된다.)
=>
[0][1][2][3][4][5][6][7]
7 6 5 4 3 2 1 0
2. P[i]가 P[j]보다 작은 경우 중 가장 큰 j를 찾아라.
=> P[i]보다 큰 수 중에서, 순열에서 가장 멀리 놓여있는 수를 찾으라.
=>
[0][1][2][3][4][5][6][7]
0 1 2 5 6 7 4 3
=>
(6 < 7) the largestJ = 5
3. P[i]와 P[j]를 맞바꾸라.
=>
[0][1][2][3][4][5][6][7]
0 1 2 5 7 6 4 3
4. P[i+1]부터 마지막 수까지 거꾸로 배열하라.
=>
[0][1][2][3][4][5][6][7]
0 1 2 5 7 6 4 3
=>
[0][1][2][3][4][5][6][7]
0 1 2 5 7 3 4 6
<<Before>>
[0][1][2][3][4][5][6][7]
0 1 2 5 6 7 4 3
<<After>>
[0][1][2][3][4][5][6][7]
0 1 2 5 7 3 4 6
좀 더 간단한 수의 경우를 가지고 한 번 더 확인해 보겠습니다~^^*
<<예>>
[0][1][2]
0 1 2
1. Find the largest i such that P[i] < P[i+1].
(If there is no such i, P is the last permutation.)
2. Find the largest j such that P[i] < P[j].
3. Swap P[i] and P[j].
4. Reverse P[i+1 .. n].
1. P[i]가 P[i+1]보다 작은 경우 중 가장 큰 i를 찾으라.
=> 자신의 다음 수보다 작은 수 중에서, 순열에서 가장 멀리 놓여있는 수를 찾으라.
=>
[0][1][2]
0 1 2
=>
(1 < 2) the largestI = 1
(만약 그런 i가 없다면, 순열 P는 가장 마지막 경우가 된다.)
=>
[0][1][2]
2 1 0
2. P[i]가 P[j]보다 작은 경우 중 가장 큰 j를 찾아라.
=> P[i]보다 큰 수 중에서, 순열에서 가장 멀리 놓여있는 수를 찾으라.
=>
[0][1][2]
0 1 2
=>
(1 < 2) the largestJ = 2
3. P[i]와 P[j]를 맞바꾸라.
=>
[0][1][2]
0 2 1
4. P[i+1]부터 마지막 수까지 거꾸로 배열하라.
=>
[0][1][2]
0 2 1
=>
[0][1][2]
0 2 1
(P[i+1]이 순열의 맨 마지막 요소이기 때문에 순서의 변화가 없다)
<<Before>>
[0][1][2]
0 1 2
<<After>>
[0][1][2]
0 2 1
네~^^*
Lexicographic Order Algorithm 사전식 배열 알고리즘이 잘 작동되는 것 같습니다~^^*
012 <<= Before
021 <<= After
102
120
201
210
오늘 저와 함께~^^* 간단한 순열의 예시를 통해~^^* Lexicographic Order Algorithm 사전식 배열 알고리즘을~^^* 차분하게 살펴봐 주셔서 감사합니다~^^*
내일은 이 알고리즘을 코드로 작성해 볼까요, 우리~~^^*
네~^^* 밤이 점점 깊어지고 있네요~^^*
보람찬 하루를 잘 개어 의자 위에 올려두고~
산뜻한 이불 속 꿈 길 사뿐사뿐 걸으며 코~^^*하셔요~^^*
네~^^* 꿈은 이루어 집니다~^^*
댓글 남기기