취미와 밥줄사이

[ Algorithm ] 선형검색( Linear Search), 이진검색(Binary Search) 본문

Python/알고리즘

[ Algorithm ] 선형검색( Linear Search), 이진검색(Binary Search)

취미와 밥줄사이 2022. 3. 5. 01:46

선형 검색(Linear Search)

  • 순차 검색(Sequential Search)이라고도 한다.
  • 데이터가 모인 집합(배열, lined List)의 처음부터 끝까지 하나씩 순서대로 비교하며 원하는 값을 찾아내는 알고리즘

  • 데이터를 정렬할 필요가 없음
  • 데이터의 양이 많아지면 검색에 소요되는 시간도 비례하여 많아지고, 하나씩 일일이 비교하기 때문에 비효율적이라는 단점이 있음
  • 10개의 데이터가 있을 경우 마지막에 있는 데이터를 찾는 경우 10번의 비교가 필요하지만 100만개의 데이터가 있는경우 100만번의 비교가 필요함
  • 선형검색은 linked list에서 자주 쓰임
def linear_search(sequence, key):
	for i in range(len(sequence)):
    	if sequence[i] == key:
        	return i
        return None

 

이진검색(Binary Search)

  • 이진검색은 트리구조에서 자주 쓰이는 형식
  • 이진검색은 데이터를 계속 반으로 나누면서 연산하기 때문에 처리속도가 매우 빠르다는 장점을 가지고 있음
  • 이진검색을 하기위해서는 데이터의 집합이 반드시 정렬(sort)되어야 한다는 단점이 존재

  • 배열의 중간에 있는 임의 값을 선택하여 찾고자 하는 값 x와 비교한다.  x가중간 값보다 작으면 중간 값을 기준으로좌측의 대상으로, x가 중간값보다 크면 우측을 대상으로 다시 탐색한다. 해당 값을 찾을 때까지 이 과정을 반복한다.
  • 종료조건
    • 원하는 값을 찾으면 종료
    • 탐색하고자 하는 배열이 더이상 존재하지 않으면 찾고자 하는 값이 배열에 존재하지 않는다는 것으로 판단할 수 있고 탐색을 종료한다.
def binary_search(target, data):
	data.sort()
    start = 0
    end = len(data) - 1
    
    while start <= end:
    	mid = (start + end) // 2
        
        if data[mid] == tartget:
        	return mid # 함수 종료
        elif data[mid] < target:
        	start = mid + 1
        else:
        	end = mid -1
    return None

 

REFERENCE

https://andrew0409.tistory.com/143

 

자료구조 : 선형검색(Linear Search)와 이진 검색(Binary Search)

검색에 대한 알고리즘 중 선형검색과 이진검색에 대하여 알아보도록 하겠습니다. 선형 검색(Linear Search) 다른이름으로 순차 검색(Sequential Search) 이라고도 하는 선형검색에 대하여 먼저 알아보겠

andrew0409.tistory.com

https://minimilab.tistory.com/44

 

파이썬 선형탐색(Linear Search), 이진탐색(Binary Search)

선형 탐색(Linear Search) 리스트의 처음부터 끝까지 순서대로 하나씩 탐색을 진행하는 알고리즘 def linear_search(element, some_list): for i in range(len(some_list)): if element == some_list[i]: return i..

minimilab.tistory.com

https://cjh5414.github.io/binary-search/

 

이진 탐색(Binary Search) 알고리즘 개념 이해 및 추가 예제

Jihun's Development Blog

cjh5414.github.io

https://wayhome25.github.io/cs/2017/04/15/cs-16/

 

강의노트 15-2. [탐색] 이진탐색(Binary Search) 알고리즘 · 초보몽키의 개발공부로그

패스트캠퍼스 컴퓨터공학 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

wayhome25.github.io

 

'Python > 알고리즘' 카테고리의 다른 글

[ Algorithm ] 공간복잡도  (0) 2022.03.05
[Algorithm] 백준 2908번: 상수  (0) 2021.12.10
[Algorithm] 단어의 개수  (0) 2021.12.10
[Algorithm] 백준 1157번: 단어공부  (0) 2021.12.10
[Algorithm] 백준 2675번: 문자열 반복  (0) 2021.12.05