J: 순열

J: 순열 (Intro 24)

J 입문 24장에서는 치환(permutation) 벡터, 순환 함수 C.의 순환 표현, 그리고 아나그램 지수 함수 A.를 설명해요.

출처: 문서

본문

아나그램(anagram)은 순열(permutation)이라는 중요 개념의 익숙한 예시예요:


   w=: 'STOP'
   3 2 0 1 { w
POST

   2 3 1 0 { w
OPTS

   3 0 2 1 { w
PSOT

{의 왼쪽 인자들은 그 자체로 목록 i.4의 순열이에요. 이것들은 p&{ 형태로 순열 함수를 나타내는 데 사용되는 순열 벡터(permutation vector)의 예시예요.

p가 순열 벡터이면 구 p&C.도 순열 p&{을 나타내요. 그러나 순환 함수(cycle function) C.의 다른 경우들은 from 함수 {과 구별돼요. 특히 C. p는 순열 p의 순환 표현(cycle representation)을 산출해요. 예를 들어:


   ]c=: C. p=: 2 4 0 1 3
+---+-----+
|2 0|4 3 1|
+---+-----+

   c C. 'ABCDE'                   C. c
CEABD                          2 4 0 1 3

순환의 각 박스된 요소는 그들 사이에서 순환하는 위치들의 목록을 지정해요. 위 예에서 위치 3의 요소는 위치 4로, 요소 1은 3으로, 요소 4는 1로 이동해요.

순열은 그것이 증가 순서로 나열된 차수 n의 모든 n! 순열 표에서의 지수(index)로 식별될 수 있어요. 이 지수를 순열의 아나그램 지수(anagram index)라 불러요. 대응하는 순열은 아래에서 보여주듯 함수 A.에 의해 실행돼요:


   1 A. 'ABCDE'                   A. 0 1 2 4 3
ABCED                          1

   (i.!3) A. i.3                  (i.!3) A. 'ABC'
0 1 2                          ABC
0 2 1                          ACB
1 0 2                          BAC
1 2 0                          BCA
2 0 1                          CAB
2 1 0                          CBA

연습문제 (Exercises)

24.1

다음을 읽고 쓰기의 연습으로 사용해 보세요(a=:'abcdef', b=: i. 6, c=: i. 6 6에서 시도):


f=: 1&A.                       Interchange last two items
g=: 3&A.                       Rotate last three items
h=: 5&A.                       Reverse last three items
i=: <:@!@[ A. ]                k i a reverses last k items

24.2

다음 표현들과 그와 유사한 것들을 실험해 C.에 축약 인자(abbreviated arguments)를 사용하는 규칙을 결정하고, 그 결론을 사전 정의와 비교해 보세요:


2 1 4 C. b=:i.6
(<2 1 4) C. b
(3 1;5 0) C. b

24.3

자신의 인자 차수의 모든 순열들의 순환 표현 표를 만드는 프로그램 ac을 만들어 보세요. 예: ac 3.

답: ac=: C.@(i.@! A. i.)

더 알아보기 (Learn more)

출처: Intro 24. Permutations