왜 번호는 0부터 매겨야 하는가?

RanolP·2020년 9월 5일
1

이 글은 Why numbering should start at zero - Edsger W. Dijkstra의 번역입니다. 오역이나 매끄럽지 않은 문장이 포함되어 있을 수 있습니다. 수정 제안은 댓글이나 public.ranolp@gmail.com으로 연락해주십시오.

자연수의 부분수열 {2,3,,12}\{2, 3, \cdots, 12\}를 해로운 줄임표 없이 나타내봅시다. 4가지 표현 방법을 쓸 수 있습니다.

  1. 2i<132 \le i \lt 13
  2. 1<i121 \lt i \le 12
  3. 2i122 \le i \le 12
  4. 1<i<131 \lt i \lt 13

이 중 다른 표현 방법에 비해 더 좋은 표현 방법이 있을까요? 네, 있습니다. 표현 방법 1과 2는 양 끝점의 차가 부분수열의 길이와 같다는 장점이 있습니다. 그리고 두 표현 방법 모두 어떤 두 부분수열이 인접할 때 작은 쪽 상한이 큰 쪽 하한과 같습니다. 여태까지 한 관찰로는 표현 방법 1과 2중에 어느 걸 고를 수 없습니다. 새로 시작해봅시다.

가장 작은 자연수가 있습니다. 표현 방법 2나 4처럼 최소값을 포함하지 않는 경우 가장 작은 자연수로 시작하는 부분수열은 하한이 자연수 바깥 영역으로 나가게 됩니다. 이는 바람직하지 않습니다. 따라서 표현 방법 1이나 3과 같이 하한에 \le를 사용하는 표현 방법이 더 좋습니다. 이제 가장 작은 자연수로 시작하는 부분수열을 하나 생각해봅시다. 최대값을 포함하는 경우 빈 수열을 나타내게 될 때 또 다시 자연수가 아닌 수를 강제하게 됩니다. 이 역시 바람직하지 않기 때문에 상한에 <\lt를 사용하는 표현 방법이 더 좋습니다. 따라서 표현 방법 1이 더 좋다고 결론지을 수 있습니다.

참고 사항: Xerox PARC에서 개발된 프로그래밍 언어 Mesa는 정수 구간을 나타내는 표기법으로 네 가지 표현 방법을 전부 쓸 수 있는 특별한 표기법을 갖고 있습니다. Mesa와 함께하며 얻은 넓은 경험은 한 표현 방법과 다른 세 표현 방법을 섞어 쓰는 것이 서투름과 실수의 원인이 된다는 것을 보여줬습니다. 그러한 경험 때문에 Mesa 프로그래머들은 하나의 표현 방법만 쓰고 다른 걸 쓰지 말라고 조언합니다. 몇몇 사람들은 실제로 확인되지 않은 결론에 불편함을 느끼기 때문에 이 실험적 증거를 언급해둡니다.

길이가 NN인 수열을 다룰 때, 부분수열의 아래첨자로 쓰는 구분되는 값, 그 중 첫번째 값이 무엇이 되느냐가 다음 질문입니다. 표현 방법 1을 써보면, 첫 아래첨자 값을 1로 시작했을 때, 아래첨자의 범위는 1i<N+11 \le i \lt N+1입니다. 0에서 시작하면 전에 비해 더 멋진 범위 0i<N0 \le i \lt N을 줍니다. 그러므로 순서 수가 0으로 시작하는 것이 좋겠습니다. 배열 원소의 순서 수 (아래첨자)는 그 부분수열에서 값의 앞에 있는 원소의 수와 일치합니다. 그리고 더 좋은 점은, 몇 세기가 필요하긴 했지만, 0이 자연수가 되었다는 점입니다.

참고 사항: 많은 프로그래밍 언어가 이러한 주의깊은 관찰 없이 설계되었습니다. FORTRAN에서 아래첨자는 언제나 1로 시작하고, ALGOL 60과 PASCAL에서는 표현 방법 3이 채택되었습니다. 더 최근에 나온 SASL은 그냥 FORTRAN의 표현 방법을 따라갔습니다. SASL의 수열은 양의 정수만 갖고 있습니다. 가여워라!

profile
사람과 컴퓨터 사이를 이어주는 소프트웨어를 만듭니다

0개의 댓글