Study/알고리즘 | 자료구조

[알고리즘] 왜 숫자는 0부터 세어야 될까? 프로그래밍 언어의 비밀

AC 2021. 3. 9. 23:38

 

 

대부분의 프로그래밍 언어에서 인덱슨느 보통 1이 아닌 0에서 시작하는 경우가 많다.

그 이유는 무엇일까?

 

네덜란드의 유명한 컴퓨터 과학자인 다익스트라(Dijkstra, 1930-2002)는 이에 대한 제안서를 작성했다.

 

<왜 숫자는 0부터 세어야 하는가? Why numbering should start at zero>

 

이 내용을 요약하면 다음과 같다.

 

 

먼저 수학에서 수의 구간을 표현하는 방식에는 다음과 같은 4가지 방법이 있다.

 

- 열린 구간

- 닫힌 구간

- 반열린 구간

- 반닫힌 구간

 

예를 들어 2에서 12까지의 정수를 표현하는 방식은 다음과 같다.

 

① 1 < n < 13

② 2 ≤ n ≤ 12 

③ 1 < n ≤ 12

④ 2 ≤ n ≤13

 

 

다익스트라는 이 4가지 방법중 시작은 닫힌 구간, 끝은 열린 구간으로 표현하는 것이 좋다고 얘기했다.

④번 방식을 말하고 있다.

 

그 이유는 첫째, 각 구간의 시작과 끝의 간격은 전체 요소의 개수와 일치하는 것이 좋다는 얘기다.

2와 12사이의 숫자는 총 11개,

③(12-1 =11)과

④(13-2=11)의 경우

 

각 구간의 시작과 끝의 차이는 11로 전체 요소의 개수와 일치한다.

 

 

이 기준에 따르면 ①(13-1 = 12)과 ②은(12-2=10)은 적합하지 않다.

 

 

 

둘째, 각 구간의 시작은 닫힌 구간(②, ④), 끝은 열린 구간 (①, ④)

일 때 부분 구간이나 빈 구간을 표현함에 있어 어색하지 않게 표현할 수 있다고 한다.

이 모든 경우를 만족하는 조건은 ④번 방식이다.

 

이제 다음의 경우를 생각해 보자. n개의 요소를 가진 배열의 인덱스를 표현할 때,

앞에서 얘기한 ④번 방식을 이용하면 다음과 같이 2가지로 표현할 수 있다.

 

ⓐ 0≤ i ≤ n

ⓑ 1 ≤ i < n + 1

 

2가지 방법 중 ⓐ방법이 요소의 개수와 구간의 숫자가 일치하므로
더 나은 방식이라는 것이 다익스트라의 견해이다.

 

이 견해를 따라 많은 프로그래밍 언어의 인덱스는 0부터 시작한다.

물론 이것과 상관없이 인덱스가 1부터 시작하는 프로그래밍 언어도 있다.

 

그리고 다른 이유로 인덱스가 0부터 시작한 프로그래밍 언어도 있다.

 

사실 인덱스가 0부터 시작하는 이유를 아는 것은 그렇게 중요하지 않을 수 있다.

 

다른 사람들이 알아볼 수 있게 코드를 짜고 개발만 잘 하면 된다.

LIST