inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[워밍업클럽3기] CS전공지식 1주차

SuHyun Jeong
0

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

Section01. 개요

  1. 자료구조

    1. var (variable, 변수)

    2. arr (Array, 배열)

      1. index를 이용하여 해당 data에 접근함

      2. 자료 구조에 따라 배열을 사용하는 것이 편할 수 있음.

         

  2. Algorithm.

    1. 확실한 방법을 의미함

    2. 시키는대로 했을 때 답이 나와야함.

    3. 모호한 방법은 안됨

    4. 자료구조에 따라 알고리즘이 달라짐

    5. 특정 자료구조 =/= 하나의 알고리즘

  3. 시간복잡도

    1. 더 좋은 알고리즘이란?

      1. 사용자의 니즈에 따라 다름

        1. depend on the memory size, speed or both

      2. 일반적으로 알고리즘 속도 = 성능속도 = 시간 복잡도

    2. 시간 복잡도: 특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간

      1. 사용자마다 컴퓨터 사양이 다르기 때문에 실행시간이 무조건 같지는 않음.

    3. 알고리즘의 평가는 코드에서 성능에 많은 영향을 주는 부분을 찾아 실행시간을 예측하는 것임.

      1. 코드에서 성능에 많은 영향을 주는 부분 = 반복문

    4. 빅오 표기법

       

      1. 빅오 표기법이 성능을 정확하게 표현하지 못하는 이유: 단순히 해당알고리즘의 입력이 늘어날 때, 계산량이 얼마나 늘어나는지를 표현하는 방법이기 때문

      2. O(n) : 선형시간 알고리즘

      3. O(1): 상수시간 알고리즘

      4. O(1) > O(logn) > O(n) > O(nlogn) > O(n^2) > O(2^n) > O(n!)

      5. 계산에 가장 많이 영향을 미치는 차수만 표시함

Section02. 자료구조

  1. 배열 [array]

    1. 기본적으로 제공하는 자료구조

    2. 일반적인 배열: 선언시 배열의 크기를 알려줌

      1. 읽기/쓰기/참조에서 좋은 성능을 보임

      2. 삽입/ 삭제에서 좋지 않은 성능을 보임

        1. 이유: 이미 연속된 메모리공간을 선언하였기 때문에 배열의 끝에 새로운 메모리로의 추가가 어렵기 때문에 새로운 사이즈의 배열을 추가할 수 있는 메모리를 찾아야함. (삭제도 같은 이유)

        2. 배열을 너무 크게할경우, 일시적으로 해결 되는 것처럼 보이지만, 결국 제한적이고 배열의 크기와 메모리의 크기가 비례하기 때문에, 너무 큰 배열은 너무 많은 메모리를 차지하게됨.

  2. 연결리스트 [linked list]

    1. 배열의 단점을 해결해줌

    2. 연결은 노드를 이용함

    3. node는 data의 위치 + next node number

      1. 위와 같은 이유로 node = linked list

    4. 장점

      1. 열의 초기 크기를 알아야하는 단점이 없음.

      2. 삽입과 삭제가 용의함

    5. 단점

      1. 데이터들이 떨어져 있어서(노드번호에 따라 위치가 다름) 특정 순서의 데이터로 바로 갈 수 없음.

      2. 각 노드의 다음노드를 무조건 알아야 하기때문에 O(n)의 성능을 가짐.

        1. array의 성능은 O(1)

데이터의 참조가 많이 일어나는 경우에는 배열이,

데이터의 삽입과 삭제가 많이 일어나는 경우에는 연결리스트가 도움이 됨.

  1. 스택(Stack)

    1. Stack의 사전적의미: 더미, 무더기 인것처럼 무작정 쌓는 개념

    2. FILO(First in Last Out)

      1. 그냥 물건 쌓아두는 개념

      2. 선입선출과 반대됨

         

  2. 큐(Queue)

    1. FIFO (First In First Out)

      1. 선입선출의 개념임

      2. 질서를 위해 서는 줄

      3. head에 삽입, 제거

    2. 연결리스트로 구현함.

    3. O(n)의 성능이 나옴

      1. 그렇기 때문에 head는 가장 앞의 노드, tail은 가장 뒤의 노드로 tail 변수추가로 O(1)의 성능이 나오게함

      2. 일반 연결리스트 아닌 이중 연결리스트 사용. (양방향 연결리스트임)

      3. tail의 이전노드를 할당함.

        1. enqueue : insert data

        2. dequeue : delete data

        3. front : 데이터 참조

        4. isEmpty : 비어있는가 확인

스택은 위로 쌓아 올려서 위에서 꺼내는 느낌이면

큐의 경우 왼쪽에서 데이터 넣고 오른쪽에서 데이터 빼내는 느낌?

  1. 덱(Deque)

    1. 삽입과 제거를 head와 tail모두에서 가능하기 때문에 스텍과 큐의 형태 모두 구현가능

    2. 추상자료형

      1. printAll: 모든 데이터 출력

      2. addFirst: head에 데이터 삽입

      3. removeFirst: head에서 데이터 제거

      4. addLast: tail에 데이터 삽입

      5. removeLast: tail에서 데이터 제거

      6. isEmpty: 리스트가 비어있는지 확인

  2. 해시테이블(hash Table)

    1. 해시테이블 (hash table)

      • hash, map, hashmap, dictionary라고도 불림

      • 표를 저장하는 가장쉬운방법 = array에 저장

        • index로 접근하다보니 빈공간이 많아지고, 낭비되는 공간이있음

        • 메모리 절약을 위해 어떠한 계산을 거쳐 인덱스로 치환함: 어떠한 계산이 해시함수임

        • 삽입, 수정, 삭제까지 O(1)의 성능을 가짐

        • 문제: 충돌이 발생하기도함

          • 해당인덱스를 연결리스트로 구현해 저장함: O(n)의 성능을 가짐

            • 이렇기 때문에 해시테이블은 해시함수의 선정이 매우 중요함.

      • 장점: 빠른 데이터 읽기, 삽입, 삭제

      • 단점: 메모리를 많이 차지함.

  3. 셋(Set)

    1. 데이터의 중복을 허용하지 않는 자료구조

    2. 해시테이블을 이용함

    3. hash set이라고도 부름

    4. hash table의 key만 사용

    5. 추상자료형

      1. add(data) 데이터 삽입

      2. isContain(data) 데이터 체크(boolean)

      3. remove(data) 데이터 제거

      4. clear() 셋비우기

      5. isEmpty() 셋이 비었는지 체크

      6. printAll() 모든 데이터 출력 

그림으로 쉽게 배우는 운영체제

Section1. 운영체제 들어가기

운영체제가 하는일

운영체제의 구조

Section2. 프로세스와 쓰레드

프로그램

프로세스

PCB(Process Control Block)

image

컨텍스트 스위칭(context switching)

쓰레드: 프로세스 내에 존재함

프로세스장/단점

쓰레드 장/단점

Section3. CPU 스케줄링

cpu스케줄링이 고려할 점 (컴퓨터의 성능에 많은 영향을 줌)

  1. 어떤 프로세스에 cpu 사용권을 주어야 하는가

     

  2. cpu 할당받은 프로세스에 얼만큼의 시간을 주어야 하는가

다중큐

 스케줄링 목표

  1. 리소스 사용률: cpu사용율 or I/O 디바이스 사용률을 높임

  2. 오버헤드 최소화: 계산이 너무 복잡하거나, 컨테스트 스위칭을 너무 자주하면 오버헤드 심해짐

  3. 공평성: 모든 프로세스에게 공평하게 cpu할당을 위함.

    1. 단 시스템에 따라 달라질 수 있음.

      1. 예를들어, 자율주행 자동차에서는 안전관련이 제일 중요, 음악재생은 덜함.

  4. 처리량: 같은 시간내 더 많은 처리를 하는 것을 목표로 삼음

  5. 대기시간: 최소화를 목표로함

  6. 응답시간: 짧은 것을 목표로함

목표간의 상반되는 것이 있음.

 FIFO (First In First Out)

장점: 단순, 직관적

단점: 순차적이여서 늦게오면 대기시간이 길어짐, I/O시간동안 cpu가 쉬고있기 때문에 cpu사용률이 떨어짐.

 

스케쥴링 성능은 평균 대기시간으로 평가함!

*burst time 계산시에는 대기시간을 총더한값에 프로세스 갯수 나누기이기 때문에, 프로세스 시간이 짧은 것을 먼저 할 경우 대기시간이 짧아짐.

SJF(Shortest Job First)

RR(Round Robin)

프로세스에게 할당하는 일정시간 = 타임퀀텀, 타임 슬라이스

RR algorithm은 컨텍스트 스위칭이 포함됨.

타임슬라이스를 너무 작게하면, 컨텍스트 스위칭이 너무 많이 일어나게됨 = 오버헤드가 너무크다.

사용자가 버벅거리게 느끼지 않고, 오버헤드가 너무 크지 않고, 동시에 실행되는 것처럼 느끼게하기..

MLFQ (Multi Level Feedback Queue)

cs 전공기초

답변 0