
추상적 자료형 (ADT, Abstract data type)
: 문제를 해결하기 위해 필요한 자료의 형태 및 연산을 수학적으로 정의한 모델 (집합, 리스트, 스택, 큐, 트리 등)
자료 구조 (Data structure)
: 추상적 자료형이 정의한 연산들을 구현한 구현체로, 마치 책장 속 책을 배열하는 방법과 같다. (콜 스택, 연결 리스트, 배열 등)
알고리즘 (Algorithm)
: 반복되는 문제를 풀기 위한 진행 절차나 방법으로, 마치 책장에서 책을 찾는 방법과 같다. (정렬, 이진 탐색 등)
즉 자료 구조란 데이터의 효율적인 접근 및 조작을 가능하게 해주는 저장 및 관리 방식이다. 자료를 구조화하여 데이터를 효율적으로 사용하기 위한 목적을 갖는다.

스칼라 scalar - 하나의 값으로 구성된 자료 구조 (자료 구조를 만드는 가장 작은 기본 단위)
여러 값을 나열한 자료 구조 :
[리스트 list]
(튜플 tuple) - 값 수정 불가능 (함수의 파라미터에 값을 입력할 때 자주 사용)
{'딕셔너리' : 'dictionary'} - 키와 값이 짝을 이루어 나열 (함수의 파라미터에 값을 입력할 때 자주 사용)
pandas 자료 구조
시리즈 series - 데이터 프레임을 구성하는 하위 요소 (데이터 프레임을 다루는 함수 대부분이 시리즈를 이용해 연산)
데이터 프레임 data frame - 행과 열로 구성된 사각형 모양의 표처럼 생긴 자료 구조 (데이터를 다룰 때 가장 많이 사용되는 자료 구조)
알고리즘의 설계와 분석을 특정한 접근 방식이나 전략에 기반하여 이해하는 프레임워크로, 각 패러다임은 특정한 문제 해결 방식이나 알고리즘 설계 원칙을 나타내며, 특정 유형의 문제에 효과적일 수 있다.
각각의 알고리즘 패러다임은 특정한 유형의 문제에 뛰어난 성능을 보이는 반면, 다른 유형의 문제에는 적합하지 않을 수 있다. 알고리즘 디자인에서는 주어진 문제의 특성에 따라 적절한 패러다임을 선택하는 것이 중요하다.
Backtracking (백트래킹):
Randomized Algorithms (확률적 알고리즘):
이 외에도 많은 알고리즘 패러다임이 존재한다.
Graph Algorithms (그래프 알고리즘)
Searching Algorithms (탐색 알고리즘)
String Matching Algorithms (문자열 매칭 알고리즘)
Machine Learning Algorithms (머신러닝 알고리즘)
(근사치)(최적화)워크플로 혹은 프로세스를 보여주는 다이어그램의 한 종류다. 여러 종류의 상자와 이를 이어주는 화살표를 이용해 주어진 문제에 대한 솔루션 모델을 보여준다. 프로세스 작용은 이 같은 상자들과 작업의 흐름(workflow)을 나타내는 화살표 연결로 나타낸다.

우리는 문제를 빨리 해결하는 알고리즘을 원한다.
알고리즘은 시간과 공간 (컴퓨터의 메모리) 두 가지의 평가 기준이 있으며, 공간은 물리적으로 늘릴 수 있지만 시간은 불가능하므로 시간 복잡도가 더 중요하다.
시간 복잡도 Time Complexity : 문제의 크기와 이를 해결하는 데 걸리는 시간 사이의 관계 (알고리즘 성능 효율성)
평균 시간 복잡도 Average Time Complexity : 임의의 입력 패턴을 가정했을 때 소요되는 시간의 평균최악 시간 복잡도 Worst-case Time Complexity : 가장 긴 시간을 소요하게 만드는 입력에 따라 소요되는 시간 공간 복잡도 Space Complexity : 문제의 크기와 이를 해결하는 데 필요한 메모리 공간 사이의 관계 (자원이 제한된 시스템에서 사용)
복잡도 특징 :
알고리즘의 시간 복잡도를 분석하는 방법 :
실제적인 방법 : 입출력 데이터의 양이 알고리즘 동작에 미치는 영향을 관찰하고 기록하는 것 (정확성이 떨어지며 사용 범위가 제한적인 단점)수학적인 방법 (점근적 분석) : 수학적으로 알고리즘 성능의 한계를 증명하는 것으로, 알고리즘 성능이 최악이 되는 경계를 판단하거나 알고리즘의 평균 성능을 찾음거듭제곱 (Exponentiation)
n^-1= 1/n
n^0= 1
n^1= n
로그 (Logarithms)
거듭제곱의 반대 개념
logₐb = x⇨a^x = b: b를 a로 몇 번 나누어야 1이 되는가?
1부터 n까지의 합
n*(n+1) / 2: n+1을 n번 곱하고 2로 나눈 값
| 함수 | 시간 복잡도 |
|---|---|
| type(), len() | O(1) |
| max(), min() | O(n) |
| str() | O(logn), O(d) - 파라미터 n, n의 자릿수 d |
| append() | O(1) |
| insert(), del, index(), reverse() | O(n) |
| .sort(), sorted() | O(nlogn) |
| slicing[a:b] | O(b-a) |
2n² + 9n + 35 : n의 영향력이 더 큰 것만 남기고, 숫자는 삭제하여 표현 = O(n²) = 빅 오 오브 엔의 제곱Big-O nonation 표현
빅 오 표기법은 상수를 무시한다.
다양한 차수가 한데 섞여 있을 때는 가장 높은 차수의 N만 고려한다.
O(n) : 선형 시간 (원소의 개수 n에 비례하여 걸리는 시간)O(1) : 상수 시간 (원소의 개수와 상관없이 고정되어 걸리는 시간)O(logn) = O(log₂n) : 로그형 알고리즘 (시간이 선형적으로 증가하면 n이 기하급수적으로 증가 = n이 클수록 실행 시간은 줄어듦)O(nlogn) : 선형-로그형 알고리즘 (데이터 입력량이 n배 늘어나면 실행 시간이 n배 조금 넘게 늘어남) O(n) * O(logn)O(n²) : 2차 알고리즘 (데이터 입력량의 제곱에 비례한 실행 시간)O(n³)O(2^n) : 지수형 알고리즘 (데이터 입력이 추가될 때마다 실행 시간이 2배로 늘어남)O(n!) : 계승(팩토리얼)형 알고리즘 (데이터 입력이 추가될 때마다 실행 시간이 n배로 늘어남)성능 순서 : O(1) > O(logn) > O(n) > O(nlogn) > O(n²) > O(n³) > O(2^n) > O(n!)


자료구조와 알고리즘에 대한 자세한 내용은 여기서 볼 수 있다.
🌟 개발 블로그 참고 🌟
ChatGPT https://ko.wikipedia.org/wiki/순서도 코드잇