티스토리 뷰

반응형

< 사진출처: https://bit.ly/3rsJ5r9 >

 

Go 언어의 slice array에서 인덱스를 어떻게 표시하는지를 보자

 

링크: https://play.golang.org/p/BeLgIYh36XT

 

예시를 보면 다음을 있다.

 

1) 인덱스는 0부터 시작한다.

2) 0, 1, 2 인덱스의 표기는 0 N < 3 으로 한다.

 

인덱스가 1부터 시작하도록 약속할 수도 있고, 인덱스 0부터 2까지라는 의미를 0 <= N <= 2 표기하는등 다양한 표현방법이 있을텐데 Go 이렇게 표기하기로 했을까? (물론 Go 이렇게 표기하는 것은 아니다)

 

Edsger W.Dijkstra

컴퓨터과학을 공부하다 보면 자꾸만 마주치는 이름이다.

다익스트라 알고리즘의 바로 분이며, 네덜란드 분이시라 네덜란드 발음으로 하면 데이크스트라

 

분이 주제와 관련하여 깔끔하게 정리한 글이 있어서 읽고 요약해보았다.

- 링크: https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html

 

 

링크글 요약 - Why numbering should start at zero

시퀸스에 대한 표시

 

순자적인 자연수 시퀸스 2, 3, …, 12 표시하는 방법은 크게 4가지가 있을 있다.

 

a) 2 i < 13

b) 1 < i 12

c) 2 i 12

d) 1 < i < 13

 

그러면 어떤게 가장 좋을까?

 

일단 a) b) 좋다. 가지 장점이 있는데

첫번째는 a) 13 -2 = 11 이고 b) 12 - 1 = 11 뺄셈을 해주면 전체 원소의 개수를 계산하기 좋다.

두번째 장점은 저런 자연수 시퀸스 두개가 인접해 있을때에 표현하기 좋다는 것이다.

- 예를들어 1 < i 12, 12 < i 15

 

이제 a) b) 중에서 무엇을 쓰면 좋을지 고민해보자

첫번째로 b) d) 같이 하한을 표시하는 값을 포함하지 않으면 하한이 있는 자연수에서 자연수가 아닌 값으로 하한을 표현해야 한다

- 예를 들어 자연수를 0부터 시작해 1, 2, 3으로 증가한다고 생각하면 -1 하한값으로 써야 하는 것이다.

 

두번째로 시퀸스로 축소를 하는 경우를 생각하면 b) c) 처럼 상한을 포함하는게 어색해진다. 경우 a) d) 낫다

- 예를 들어 b) 같은 방법으로 시퀸스를 표현하려면 1 < i 0 되어야 한다. a) 방식이라면 2 i < 2 표현하면 되는 것이다.

 

따라서 최종적으로 a) 같은 방식이 선호된다.

 

0부터 시작할까? 1부터 시작할까?

 

이제 우리는 a) 같은 half-open range 방식이 좋다는 것을 알게되었다.

그러면 인덱스는 0으로 시작하는게 좋을까? 아니면 1부터 시작하는게 좋을까?

 

N개의 시퀸스를 표현한다고 하면

 

1부터 시작하면 1   i    N +1 되고

0부터 시작하면 0   i    N  된다.

 

0부터 시작하는 것의 장점은 해당 인덱스보다 앞에 있는 원소의 개수가 바로 인덱스 값이 된다는 것이며, 결과로 첫번째 인덱스 0 앞에 아무것도 없다는 , 0개라는 것을 의미한다. 그리고 현대의 수학자들은 0 자연수의 체계에 포함시켰다. 따라서 0부터 시작하는게 더욱 자연스럽게 된다.

*정현석: 이경우 상한의 값이 전체 원소의 개수가 되는 장점도 있겠다.

반응형
댓글
댓글쓰기 폼