이전에 전화번호부 관련 프로젝트를 진행한 경험이 있다. 하지만 전화번호부에 있는 이름들을 다 선형 탐색으로 필터링하고 있었다. 사실 유저가 많지 않기 때문에 선형탐색으로 해도 특별히 문제점을 느끼지 못했다. 하지만 유저의 수가 증가할수록 선형 탐색이 아닌 이진 탐색이 필요하다는 것을 느끼게 되었다. 때문에 이 부분은 수정이 필요했다. 왜 선형 탐색보다 이진 탐색이 나았는지는 아래 코드 결과를 보면 정확하게 파악할 수 있다. 선형 탐색과 이진 탐색을 비교하기 위해 먼저 정렬된 배열을 준비했다. for문을 돌려 0부터 1000까지의 숫자를 붙여주고 그 배열을 가지고 탐색을 진행했다. 먼저 선형 탐색을 보자. linear 말 그대로 하나씩 탐색하며 검사하는 방법이다. 30을 찾는다고 가정한다. for문을 돌면..
전화번호부에서 이름을 검색할 때 이진 탐색을 사용한다. 이전 프로젝트에서도 전화번호부에서 이름을 검색해야 했는데 배열의 처음부터 다 매칭 해보는 방법을 사용해 O(n)의 시간 복잡도를 가졌습니다. 그때 이진 탐색을 사용했더라면 O(logn)의 시간 복잡도를 가져 배열이 길수록 훨씬 더 효율적으로 검색할 수 있었겠죠. ㅠ_ㅠ 사실 이진 탐색 알고리즘이 무엇인지는 학교에서 배워서 대충은 알고 있었으나 실전에서 이렇게 사용되는지는 와 닿지 않았습니다. 그래서 이번 기회에 이진 탐색 알고리즘을 학습하고 정리하려 합니다. 먼저 이진 탐색 알고리즘의 조건은 데이터가 정렬되어 있어야 합니다. 스위프트로 작성한 코드를 봅시다. 중간 인덱스를 찾아서 중간 인덱스의 값이랑 비교를 합니다. 중간 인덱스 값과 내가 원하는 값..
- Total
- Today
- Yesterday
- ARC
- 애니메이션
- SWIFT
- 알고리즘
- 책
- iOS SwiftUI
- Deep learning
- Animation
- wwdc
- string
- 딥러닝
- 문자열
- stanford SwiftUI
- 책 후기
- leetcode
- Xcode
- ios
- 머신러닝
- objc
- Algorithm
- 독서
- rxswift
- RX
- objective-c
- swiftUI
- 책 추천
- ReactiveX
- swift5
- 스위프트
- 스위프트UI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |