본문 바로가기

엉뚱한 질문

#0 프로그래밍은 0부터 시작해요

처음 코딩을 접했을 때 숫자를 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

원본출처    https://www.facebook.com/engineertoon

... 그만 알아보도록 하자 End.

'엉뚱한 질문' 카테고리의 다른 글

#3 1,000,000,007로 나누기  (1) 2021.08.01
#2 객체/클래스/인스턴스  (3) 2021.07.22
#1 변수 i 의 숨겨진 비밀  (7) 2021.07.12