//type (*name)(param...)
void (*fp)();
void func()
{
cout << "AAA" << endl;
}
int main()
{
fp = func;
fp();
return 0;
}
class Test
{
public:
void func()
{
cout << "AAA" << endl;
}
};
//type (class::*name)(param...)
void (Test::*fp)();
int main()
{
Test t;
fp = &Test::func;
(t.*fp)();
return 0;
}
어떤 작업을 실행할 수 있는 파일
Job = 프로그램 + Data
컴퓨터에서 연속적으로 실행되고 있는 프로그램
적어도 1개 이상의 쓰레드를 보유
실질적으로 연산을 수행하는 단위
각각이 stack을 보유
프로세스의 code, data, heap은 공유
시간복잡도, 공간복잡도 고려가 필수적임.
일반적으로 시간복잡도를 더 중요하게 여김.
데이터 개수에 따라 소요되는 시간을 표현한 것.
인접한 두 원소를 비교하여 자리를 교환.
가장 끝에서부터 정렬.
시간복잡도 : O(n2)
공간복잡도 : O(n)
swap이 많이 발생.
원소를 넣을 위치가 결정되어 있고, 넣을 원소를 결정하는 알고리즘.
시간복잡도 : O(n2)
공간복잡도 : O(n)
정렬을 진행하면서 일부가 정렬되어있음 = 정렬된 리스트에 새 데이터를 넣을 장소를 찾는 알고리즘
원소를 결정한 후, 넣을 위치를 결정하는 알고리즘.
쉘 정렬의 일부로 사용.
어느정도 정렬된 배열에 대해서 속도가 빠름.
시간복잡도 : O(n2)
공간복잡도 : O(n)
삽입 정렬이 어느정도 정렬된 배열에 대해 속도가 빠르다는 것에서 착안한 알고리즘.
일정한 간격 단위로 삽입 정렬을 수행.
(최악)시간복잡도 : O(n2)
(평균)시간복잡도 : O(n1.5)
공간복잡도 : O(n)
pivot을 결정한 후, pivot을 기준으로 정렬.
분리된 부분끼리 반복.
만약 중간에 위치할 값을 미리 안다면 최적으로 수행할 수 있을 것임
ex) 0~100까지의 값의 범위라면 50을 찾아서 pivot으로 삼는다.
다만, 이런 경우라도 값이 한 곳에 몰려있다면(1, 2, 3, 4, 50, 100) 최적이라고 장담할 수 없음
(최악)시간복잡도 : O(n2)
(평균)시간복잡도 : O(nlog2n)
공간복잡도 : O(n)
시퀀스 다이어그램과 클래스 다이어그램은 필수.
정리하는 느낌으로 작업 중 틈틈히 작성.
https://www.websequencediagrams.com/
처음 보는 코드를 시퀀스 다이어그램을 이용하면 쉽게 분석할 수 있음.
MSVC에서도 참조 구조가 가능.