Silverback9

#야생으로

Creative Coding 독학 제296일 2025년01월17일(금)

오늘은~^^* 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 사전식 배열 알고리즘을~^^* 차분하게 살펴봐 주셔서 감사합니다~^^*

내일은 이 알고리즘을 코드로 작성해 볼까요, 우리~~^^*

네~^^* 밤이 점점 깊어지고 있네요~^^*

보람찬 하루를 잘 개어 의자 위에 올려두고~

산뜻한 이불 속 꿈 길 사뿐사뿐 걸으며 코~^^*하셔요~^^*

네~^^* 꿈은 이루어 집니다~^^*

댓글 남기기