티스토리 뷰
< 사진출처: 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부터 시작하는게 더욱 자연스럽게 된다.
*정현석: 이경우 상한의 값이 전체 원소의 개수가 되는 장점도 있겠다.
'development' 카테고리의 다른 글
LeetCode 문제풀이는 실무에 도움이 되는가? (3) | 2021.04.28 |
---|---|
ACID - 확실히 알고 넘어가자 (0) | 2021.04.26 |
Endian 이란 무엇일까? (0) | 2021.02.03 |
클린 애자일 - 6장 애자일해지기 (0) | 2021.01.19 |
클린 애자일 - 5장 기술 실천 방법 (0) | 2021.01.19 |
- Total
- Today
- Yesterday
- OpenAI
- 인텔리제이
- 제이펍
- intellij
- 클린 애자일
- 체호프
- agile
- 독서후기
- 오블완
- 티스토리챌린지
- Gin
- 노션
- go
- 잡학툰
- websocket
- clean agile
- Bug
- solid
- folklore
- API
- 2023
- strange
- notion
- 영화
- ChatGPT
- bun
- 엉클 밥
- 독서
- github
- golang
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |