TIL(Today I Learned)

Day.8 Basic algorithm langu- python

지팡구 2022. 11. 9. 21:35

오늘도 무난하게 공부했다. 알고리즘 시작

(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://velog.io/@cha-suyeon/Algorithm-%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84-%EA%B3%B5%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84

https://noahlogs.tistory.com/27

 

빅오 표기법 (big-O notation) 이란

컴퓨터 과학(Computer Science) 에서 알고리즘은 어떠한 문제를 해결하기 위한 방법이고, 어떠한 문제를 해결 하기 위한 방법은 다양하기 때문에 방법(알고리즘) 간에 효율성을 비교하기 위해 빅오(bi

noahlogs.tistory.com

https://velog.io/@welloff_jj/Complexity-and-Big-O-notation

 

복잡도(Complexity): 시간 복잡도와 공간 복잡도, 그리고 빅오(Big-O) 표기법

시간 복잡도와 공간 복잡도, 그리고 빅오 표기법

velog.io