알고리즘이란? 

문제 해결을 위하여 여러 동작들, 방법들의 집합이다.

최빈값 찾기 문제 - ASCII 코드를 활용하여 문제를푼다.

def find_alphabet_occurrence_array(string):
alphabet_occurrence_array = [0]*26
for char in string:
if not char.isalpha():
continue
arr_index = ord(char) - ord("a")
alphabet_occurrence_array[arr_index] += 1
return alphabet_occurrence_array

char에서 아스키 코드 변환 방법

ord('alphabet')을 넣으면 아스키 번호가 나오고 해당 아스키 번호에 97을 빼면 알파벳의 인덱스가 나온다.

ord('a') -97  = 0 (index number)

변환하는 방법은 반대로 하면된다.

chr(alphabet_index + ord('a'))

시간복잡도 판단하기

시간 복잡도란? 입력값과 문제를 해결하는 데 걸리는 시간과의 상관관계

ex) 입력값이 2배로 늘어났을 때 문제를 해결하는데는 몇배로 늘어날지?

for num in array:

    for compare_num in array: #array의 길이만큼 아래 연산이 실행

         if num < compare_num: #array의 길이만큼 아래 연산이 실행

                  if num < compare_num: #비교 연산 1번 실행

                                    break

입력값이란? 함수에서 크기가 변경될 수 있는 값이라고 보면 된다.

공간 복잡도 판단하기

공간 복잡도란? 입력값과 문제를 해결하는 데 걸리는 공간과의 상관관계

ex) 입력값이 2배로 늘어났을 때 공간은 몇배로 늘어날지?

어떻게 공간복잡도를 판단할 수 있을까?저장하는 데이터의 양이 1개의 공간을 사용한다!

상수 값들은 큰 상관이 없다. N^2 와 N 과 같이 시간복잡도처럼 차이가 나지 않는다.

<명심해야할 것>

공간 복잡도보다는 시간 복잡도를 더 신경써야한다!!

점근표기법

알고리즘의 성능을 수학적으로 표기하는 방법. (알고리즘의 '효율성'을 평가하는 방법)

점근 표기법의 종류:

빅오(Big-O)표기법, 빅 오메가 표기법이 있다.

빅오 표기법: 최악의 성능이 나올 때 어느정도의 연산량이 걸릴지

빅오메가 표기법: 최선의 성능이 나올때 어느정도 걸릴지

보통 알고리즘은 빅오표기법으로 함. 최선의 경우가 나오는 경우는 많지 않다. (빅오메가)

profile
모든 코드에 의미를 담겠습니다.

0개의 댓글