어떤 과제를 완수하는 명령어 집합
알고리즘 기준 : 비정렬된 배열 vs 정렬된 배열 (에 따라서 많이 달라짐)
삽입에 있어 정렬된 배열이 전형적인 배열보다 덜 효율적
삽입 위치에 따른 영향
값이 배열 앞쪽에 위치:
값이 배열 뒤쪽에 위치:
비정렬 배열
정렬된 배열
선형검색이란?
데이터를 순서대로 하나씩 확인하면서 원하는 값을 찾는 검색 알고리즘
이진검색이란?
정렬된 배열에서 선형검색보다 훨씬 빠른 이진검색(알고리즘)
배열의 크기만큼 절반을 나누고, 그 mid_point가 원하는 값보다 작은지, 큰지를 바탕으로 왼쪽,오른쪽 이동하여 범위를 계속 좁혀 나가는 방식이다.
const binary_search(array, search_value){
lower_bound = 0;
upper_bound = array.length - 1;
while(lower_bound<=upper_bound){
mid_point = (upper_bound + lower_bound) / 2
value_point = array[mid_point]
if(value_point === search_value){
return mid_point // index 추출
}else if(value_point < search_value){
lower_bound = mid_point+1
}else if(value_point > search_value){
upper_bound = mid_point-1
}
}
return null
}
-> while 문의 루프는 search_value를 찾을 . 수 있는 원소가 남아 있을 때까지 수행된다.
100개의 값을 갖는 배열에서 검색에 필요한 최대 단계 수
선형검색 - 100단계
이진검색 - 7단계
이진검색을 쓰면 추측할 때마다 검색해야 . 할 셀 중 절반을 제거할 수 있다.
즉, 정렬된 배열의 크기를 두 배로 늘릴 때마다 이진 검색에 필요한 단계 수가 1씩 증가하는 패턴이 보인다. 값을 확인할 때마다 검색할 원소의 절반을 제거한다. (데이터를 2배로 늘릴 때마다 이진 검색 알고리즘에서는 최대 한 단계만 더 추가하면 된다.) (but, 선형검색에서는 원소 수만큼의 단계가 필요하다)
etc) 정렬된 배열에 이진검색을 쓸 수 있다고 해서 항상 정렬된 배열을 써야하는 것은 아니다. 데이터 검색은 거의 없고 데이터를 추가하기만 한다면 삽입을 더 빠르게 처리하는 배열이 더 나은 선택일 수도 있다.