오늘도 무난하게 공부했다. 알고리즘 시작
(Java와 C가 아닌 python으로 구현하려고 하니 왤케 버벅거리는지...)
알고리즘을 풀 땐, 역시,, 종이와 펜
오늘 강의를 보면서 정리를 해야겠다고 생각한 내용은 다음과 같다.
1. Python isalpha (완료)
일단 isalpha는 내장함수, 문자열에 공백이 있으면 안된다.
위에 해당하는 조건이 없다면? True 반환 아니면 False
이거 말고도 숫자인지 확인할 수 있고, 알파벳 또는 숫자인지 확인할 수 있는 내장함수가 있었다
isdigit = 숫자인지 확인 (기호 포함시 false, 문자도, 공백도 동일)
isalnum = 숫자 또는 알파벳인지 (기호 및 공백 포함시 false 반환)
2. 비트맵 자료구조 (애매)
금일 2~4시까지 노드 튜터님이 알고리즘 강의를 해주셨는데, 강의 내용중에 비트맵 자료구조를 언급하셨고, 이게 무엇인지 가물가물해서 정리해본다
우선 비트맵(bitmap)은 이진수 형태의 자료구조이며, n자리 이진수로 이루어져 있다.
자료 n개의 사용 가능성을 표시할 때 사용한다는데... 음? (행렬 비슷한 느낌인가?)
생각보다 비트맵 자료구조에 대해 설명이 없다 (벡터 이미지 관련 설명...)
비트맵 인덱스는 일반적으로 데이터 조회 시 좋은 성능을 낸다...?
3. 복잡도(Complexity) 그리고 표기법
알고리즘? 결국 성능에 대한 이슈로 인해 사용하게 됨.
이 성능을 어떻게 평가할 것인가?
복잡도(Complexity)는 성능에 대한 평가의 척도
시간 복잡도 : 말 그대로 얼마나 수행하는지 (Time)
공간 복잡도 : 말 그대로 얼마나 메모리 공간 쓰는지
또한 표기법에는 빅오, 오메가, 세타 등이 있으며 주로 빅오, 세타 표기법을 많이 사용한다.
(당연히 알고리즘은 시간을 적게 사용할 수록 좋은 거겠죠?...)
시간 복잡도에는 빅-오(big - O) 표기법이 수식어처럼 붙어서 나옴
이 빅 - 오 표기법은 최악의 경우를 계산하는 방식
빅오 표기법이 많이 사용되는 이유는 알고리즘 효율성을 상한선을 기준으로 표기하는데, 이는 최악의 경우를 고려할 때 가장 좋은 표기법이다. (알고리즘의 효율성은 값이 클 수록 안 좋음)
시간 복잡도는 위에서 설명한 것 처럼 얼마나 수행하는지에 대한 척도인데, 실행 시간이 아닌 연산 횟수를 셈한다
이유는 플랫폼 별 동일한 결과가 나오지 않고, 실행 시간 측정을 위한 또 다른 방법이 필요하기 때문이다.
공간 복잡도는 요즘 중요도가 많이 떨어짐 why? 컴퓨터 성능의 향상으로...
물론 안 중요한 것은 아니지만, 알고리즘에선 시간이 최고기에 시간 복잡도가 중심
참고)
https://noahlogs.tistory.com/27
https://velog.io/@welloff_jj/Complexity-and-Big-O-notation
'TIL(Today I Learned)' 카테고리의 다른 글
Day.10 Binary Search(이진 탐색) - 백준 1920번(수 찾기) (0) | 2022.11.11 |
---|---|
Day.9 자료구조 그리고 알고리즘 언어의 선택(Linked List) (1) | 2022.11.10 |
Day.7 Python 내가 궁금했던 지식 채우기 (0) | 2022.11.08 |
Day.6 돌 다리도 두들겨보고 건너라(Java) (0) | 2022.11.07 |
Day.5 MiNiProject의 엔딩.. - "Team 봄바람"의 마지막 회고- (1) | 2022.11.04 |