Team Blog의 글을 이곳 게시판의 "정보글"로 모았습니다. Team blog는 기고자가 올린 글에 질문을 받는 부담을 줄이기 위하여 댓글을 허용하지 않았습니다. 그러나 이곳 게시판으로 모으면서 댓글을 달 수 있습니다. 게시물을 작성하실 때 댓글을 원하지 않으시면 댓글을 허용하시지 않으시기를 바랍니다. 또한 불필요한 소모성 댓글을 달지 않도록 주의하여 주시기를 바랍니다.
TeX과 관련된 질문이나 답변은 QnA 마당을 이용하십시오. TeX과 관련된 질문은 지웁니다
주어진 배열의 모든 순열을 나열하는 방법은 여러 가지가 있습니다.
가장 먼저 생각할 수 있는 것이 모든 순열을 사전식으로 나열하는 것이고, 또, plain changes 라는 꽤 효과적이고 유명한 알고리즘이 있습니다.
이 알고리즘의 특징은, 순열들을 나열할때, 다음 순열은 현재 순열의 위치와 한쌍만 다르다는 것입니다.
예를들면, "abc"라는 문자열의 순열들을 모두 나열할 때, 다음 처럼하면
abc, acb, cab, cba, bca, bac
abc에서 다음 acb로 갈때는 (b,c)의 위치만 서로 바뀐 것이고, acb 에서 그 다음 cab로 갈때는 (a,c)의 위치만 바뀐것입니다.
이처럼 abc에서 시작하여 한쌍의 위치만 서로 바꾸면서 최종 bac까지 가는 방법이 plain changes 알고리즘입니다.
plain changes와 같은 방식으로 동작하는 순열에서는 짱먹는 Heap 알고리즘이 있습니다.
이 알고리즘은 plain changes와 개념은 같지만 보다 좀더 효율적입니다.
그래서 Heap 알고리즘을 루아로 구현해봤습니다. https://bit.ly/2rxaUBF
루아로 됐으니, 텍으로 만들 수도 있다는 뜻이죠.