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.)