728x90

이진탐색은 정렬된 배열에서 특정한 값을 찾는 알고리즘이다

배열의 중간값을  기준으로 값을 찾고 

찾고자하는 값과 중간값을 비교하고 탐색범위를 반으로 줄인다

탐색범위가 없을 때까지 반복한다

 

chatqpt에거 물어본 이진탐색 

 

def binary_search(arr, target):   #정렬, 찾고자 하는 값이 인수로 들어감
    left = 0  #arr의 맨왼쪽인덱스
    right = len(arr) - 1 #arr의 맨오른쪽인덱스

    while left <= right:  #비교했을 때 오른쪽이 작을때까지 반복 (즉 탐색할 배열이 없을때까지)
        mid = (left + right) // 2

        if arr[mid] == target: #가운데데 인덱스의 값이 찾고자하는 값이면 
            return mid   #가운데인덱스를 리턴
        elif arr[mid] < target: #찾고자하는 값보다 가운데 인덱스의 값이 작으면
            left = mid + 1  #맨왼쪽, 첫번째 인덱스가 중간값부터 시작됨 (시작점을 바꿔서 기존 정렬을 반으로나누는것 뜻)
        else:
            right = mid - 1 #맨오른쪽, 마지막 인덱스가 중간값부터 시작됨(시작점을 바꿔서 기존 정렬을 반으로나누는것 뜻

    return -1 #값을 못찾으면 -1 내보냄 너가 찾는 값없어~~

이진 탐색은 검색, 정렬, 최솟값/최댓값 찾기 등 다양한 문제에서 사용됩니다.
이진 탐색은 탐색할 배열이 정렬되어 있어야 한다는 조건이 있지만, 이 조건을 만족한다면 빠른 탐색을 수행할 수 있는 알고리즘입니다. 이진 탐색은 효율적인 탐색을 위해 항상 고려해야 할 알고리즘 중 하나입니다.

728x90
728x90

재귀함수

나 자산을 또 호출하는 함수

 

반복적으로 실행함

그래서 재귀 함수 만들 때!

 

1. recurrence relation 점화식

2. base case 

꼭있어야함. 

 

점화식으로 계속 반복되고 

그 반복이 base case에 도달하면 재귀함수가 끝이 남. 

base case가 없으면 무한루프되므로 주의!

 

Tree 개념

 

노드: 트리는 보통 노트로 구현

차수degree 각노드가 갖는 자식의 수

 

모든 노드의 차수가 N개 이하인 트리를 n진 트리라 한다. 

 

Binary Tree 이진트리 

차수가 2진 이하 

이 노드들의 구성 요소:

value값 저장, left child 주소값 저장, right child wnthrkqt wjwkd

 

코드로 구현시:

1. 이렇게 구현된 노드생성 

 

2. binary Tree 구성

 

트리 순회Traversal (= 트리탐색, 완전탐색)

트리의 각 노드를 방문하는 과정을 말함

모든 노드를 한번씩 방문해야해서 순회 방법으로는 

너비우선탐색의 BFS Breadth-First Search

깊이우선탐색의 DFS Depth-First Search

 

 

BFS

root기준으로 탐색. 아래로 level 0, level1 이렇게 가까운것부터 탐색

 

순회해서 그 노드에 "방문한다"

->

그 노드에 접근하는 것은 언제든 할 수 있음.

근데 "방문"은 그노드에 접근해서 "어떤 작동을 시키는 것"

 

트리순회에서 그냥 접근하는 것과 방문하는 것은 다름!

 

 

DFS

스택 반복문으로도 만들 수 있고

재귀로도 만들 수 있음.

 

DFS는 접근 어떻게 할지 생각하고 방문 어떻게 할지 생각.

접근을 재귀로 한다. 

방문은 순회 종류에 따라 다른데

전위순회 preorder

자식노드들에게 가기 전에 일단 자기 자신 방문(기록을 하든 뭘하든..)먼저함.

중위순회 inorder

나 자신을 방문하는게 중간에 있음

후위순회 postorder

자식들 다 방문하고 나서 자기 자신 방문

 

 

 

 

 

 

 

 

 

728x90
728x90

https://youtu.be/NFETSCJON2M

array

read 읽는 건 빠르지만

delete 삭제하고

seach 찾고 

등하는 것은 전체 배열길이 알고 중간거 삭제한다음에 빈칸 없앨라고 옆으로 다 이동하거나

전체 복사해서 새로운 배열길이 넣어야돼서 시간 걸림

 

Linear Search 선형검색

앞에서부터 읽는 것

 

 

Binary Search 이진검색

중간 값을 기준으로 왼쪽으로 갈지 오른쪽으로 갈지 따짐!

그래서 데이터양 많아도 비교적 금방 다룰 수 있다. 

하지만 조건이 있음 정렬된 배열만 가능해! 그래서 정렬을 다 하고나서 써야한다. 선형검색과 다르게 

 

https://youtu.be/WjIlVlmmNqs

728x90

+ Recent posts