본문 바로가기

TIL

[TIL]20220528

CS 스터디

챕터 18: 알고리즘과 초콜릿 케이크 레시피

챕터 19: 반에서 가장 키 큰사람 찾기: 선형 알고리즘

알고리즘

  • 세심하고, 정확하고 명료하게 작성된, 결과를 정확하게 계산되도록 보장된 일련의 단계
  • 각 단계는 기본적인 연산으로 표현되어 있고 연산의 의미는 완전하게 명시됨
    • 모든 가능한 상황을 다루어야 하며, 다음에 무엇을 해야할지 모르는 상황이 발생하면 안된다.
    • 알고리즘을 이루는 모든 구성 요소가 애매하거나 모호한 부분이 있으면 안됨!
    • 인간의 언어를 컴퓨터도 이해할 수 있을 정도로 단계를 명확하고 상세하게 설명해야 한다!
    • 알고리즘은 결국 멈춰야 한다.
  • 정확하고 신속한 알고리즘의 설계부터 구현까지 모두 컴퓨터과학, 데이터 분석, 웹 개발 등 모든 소프트웨어 분야에서 매우 중요하다
    • 결국 한정된 자원(메모리, 시간 등)을 효율적으로 사용해야하기 때문이다!
  • 코테를 보는 이유 → 주어진 자원을 효율적으로 사용하고 문제 해결 능력을 판단하기 위해 → 효율적인 어플리케이션 개발은 실제 프로젝트에서 매우 중요

선형 알고리즘 (선형 탐색)

  • 배열의 맨 앞이나, 맨 뒤부터 순서대로 하나씩 찾아보는 알고리즘!
    • 요소가 직선으로 늘어진 배열에서 원하는 키 값을 갖는 요소를 찾을 때까지 순서대로 탐색
  • 계산시간이 데이터의 양에 정비례하거나 선형적으로 비례한다. 
  • 최선의 경우 원하는 키 값이 맨 앞에 있음 → O(1)
  • 원하는 키 값이 맨 뒤에 있거나 원하는 키 값이 없는 경우 혹은 배열을 끝까지 탐색해야 하는 경우(최대, 최소 판별)인 경우 → O(N)

알고리즘 

이진탐색(1)

이진탐색이란?

  • 배열이 정렬되어있을 경우, 절반씩 줄여나가면서 탐색하는 기법

 

이진탐색의 효율성

  • 1억 개 목록을 선형탐색할 때, 1억 번을 연산해야 한다. 이진탐색으로 찾는다면, 27번 안에 찾을 수 있다.
  • import math math.log2(100000000) # 26.575424759098897
  • 이진탐색을 위해서는 정렬되어 있어야 한다

 

이진 탐색 구현

def binary_search(nums, target):
    def bs(start, end):
        if start > end:
            return -1

        mid = (start + end) // 2

        if nums[mid] < target:
            return bs(mid + 1, end)
        elif nums[mid] > target:
            return bs(start, mid - 1)
        else:
            return mid

    return bs(0, len(nums) - 1)

 

def binary_search_builtin(nums, target):
    idx = bisect.bisect_left(nums, target)
		# idx == len(nums) 가능하기 떄문.
		"""Return the index where to insert item x in list a, assuming a is sorted.

    The return value i is such that all e in a[:i] have e < x, and all e in
    a[i:] have e >= x.  So if x already appears in the list, a.insert(x) will
    insert just before the leftmost x already there.

    Optional args lo (default 0) and hi (default len(a)) bound the
    slice of a to be searched.
    """
    if idx < len(nums) and nums[idx] == target:
        return idx
    else:
        return -1

알고리즘 문제

 Binary Search

Intersection of Two Arrays

Search in Rotated Sorted Array

Two Sum II - Input Array Is Sorted

Search a 2D Matrix II

범위를 반씩 좁혀나가는 탐색 (이것이 코딩 테스트다 CH07)부품 찾기 (이것이 코딩 테스트다 CH07)\

 

'TIL' 카테고리의 다른 글

[TIL]20220530  (0) 2022.05.30
[TIL]20220529  (0) 2022.05.29
[TIL]20220527  (0) 2022.05.27
[TIL]20220526  (0) 2022.05.26
[TIL]20220525  (0) 2022.05.25