처음 코딩을 접했을 때 숫자를 1이 아닌 0부터 센다는게 진짜 어이가 없었다.
0번째 값이 1이고 1번째 값이 2이고... 나만 헷갈리나?
암튼 도대체 0부터 시작하는게 왜 좋은건지 궁금해서 알아보았다 ㅎㅎ
다익스트라 노트
네덜란드의 컴퓨터 과학자 다익스트라(Dijkstra, 1930-2002)가 정리한 유명한 노트가 있다.
<Why numbering should start at zero>
'0부터 시작하고 마지막 수는 포함하지 않는 인덱스 넘버링' 이
프로그래밍에 왜 좋은 표현인지 이유가 담겨있다.
수학에서 수의 구간을 표현하는 방식에는 4가지가 있다.
Ex) 2에서 12까지의 정수를 표현하는 방식
① 1 < n < 13
② 2 ≤ n ≤ 12
③ 1 < n ≤ 12
④ 2 ≤ n < 13
다익스트라는 4가지 방법 중 ④시작은 닫힌 구간, 끝은 열린 구간으로 표현하는 것이 좋다고 말했다.
첫째, 각 구간의 시작과 끝의 간격은 전체 요소의 개수와 일치하는 것이 좋다.
2와 12 사이의 숫자는 총 11개 이므로,
①(13 - 1 = 12)과 ②(12 - 2 = 10)은 부적합
③(12 - 1 = 11)과 ④(13 - 2 = 11)은 적합!
둘째, 인접한 두 집합을 붙였을 때 마지막 수와 시작 수가 같아서 깔끔해서 좋다.
0 ≤ x < 5
5 ≤ y < 10
셋째, '인덱스가 시작수를 포함하지 않는 경우'에 가장 작은 자연수부터 시작하려면,
그것보다 더 작은 수를 써야한다.
0 (가장 작은 자연수)을 포함하려면 -1 < n
- 깔끔하지 않다.. ③부적합
넷째, '인덱스가 마지막수를 포함하는 경우'에 가장 작은 수부터 시작한다면,
공집합을 표현하기 위해서 가장 작은수보다도 작은 수를 써야한다.
0 부터 시작한다면 공집합을 표현하기 위해 n ≤ -1
- 역시 깔끔하지 않아.. ③부적합
결국, 이러한 논리로 다익스트라는 ④방식이 좋다고 말한 것이다.
앞에서 얘기한 ④번 방식을 떠올리며 아래와 같은 n개의 요소를 가진 배열을 살펴보자
ⓐ 0 ≤ i < n
ⓑ 1 ≤ i < n+1
2가지 방법을 봤을 때 ⓑ에 비해 ⓐ가 더욱 간결하고 깔끔하다.
즉, 인덱스가 0부터 시작해야 마지막 수가 집합의 크기랑 같아져서 직관성도 높아진다.
프로그래밍 언어는 0부터 시작한다.
궁금증 해결!
cf. 아... 맞다, R-프로그래밍은 인덱스 1부터 시작한다
(대부분^^) 프로그래밍 언어는 0부터 시작한다.
- 출처 -
https://acstory.tistory.com/204
https://burningrizen.tistory.com/264
... 그만 알아보도록 하자 End.
'엉뚱한 질문' 카테고리의 다른 글
#3 1,000,000,007로 나누기 (1) | 2021.08.01 |
---|---|
#2 객체/클래스/인스턴스 (3) | 2021.07.22 |
#1 변수 i 의 숨겨진 비밀 (7) | 2021.07.12 |