리스트 안에 있는 특정한 데이터를 찾기위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법
정렬되지 않은 리스트에서 데이터를 찾아야 할 때 사용
리스트 내에 데이터가 아무리 많아도 시간만 충분하다면 항상 원하는 원소를 찾을 수 있다는 장점 !
따라서 순차 탐색은 이름처럼 순차로 데이터를 탐색한다는 의미 ! 그만큼 구현도 정말 간단 !
def sequential_search(n, target, array):
for i in range(n):
if array[i] == target:
return i + 1
print("생성할 원소 개수를 입력한 다음 한 칸을 띄고
찾을 문자열을 입력하세요")
input_data = input().split()
n = int(input_data[0])
target = input_data[1]
print("원소 개수만큼 문자열 입력")
array.split()
print(sequential_search(n, target, array))
최악의 경우 시간 복잡도 O(N) - 데이터 개수가 N일때 최대 N번의 비교 연산이 필요
반으로 쪼개면서 탐색하기
이진 탐색은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수있는 알고리즘
탐색 범위를 절반씩 좁혀가면서 데이터를 탐색하는 특징
범위의 시작점, 끝점, 중간점이라는 변수 3개 사용
찾으려는 테이터와 중간점 위치에 있는 데이터를 반복적으로 비교
원소의 개수가 절반씩 줄어든다는 점에서 시간 복잡도가 O(logN)이다.
def binary_search(array, target, start, end):
if start > end:
return None
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
return binary_search(array, target, start, mid - 1)
else:
return binary_search(array, target, mid + 1, end)
n, target = list(map(int, input().split()))
array = list(map(int, input().split()))
result = binary_search(array, target, 0, n-1)
if result == None:
print("원소가 존재하지 않습니다.")
else:
print(result + 1)
def binary_search(array, target, start, end):
while start <= end:
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
end = mid - 1
else:
start = mid + 1
return None
n, target = list(map(int, input().split()))
array = list(map(int, input().split()))
result = binary_search(array, target, 0, n-1)
if result == None:
print("원소가 존재하지 않습니다.")
else:
print(result + 1)