컴퓨터는 CPU, memory, Disk로 이루어져 있음
CPU 혹은 중앙 처리 장치는 컴퓨터에서 기억, 해석, 연산, 제어라는 4대 주요 기능을 관할하는 장치를 말한다.프로그램의 명령어를 해석하여 데이터를 연산/처리를 하고 그렇게 돌아가도록 제어해주는 부분, 혹은 그 기능을 내장한 칩을 의미한다.
프로그램에서 입력 -> CU에 해당 입력된 값을 연산해달라고 접수가 됨 ->Fetch -> Decode -> ALU->출력
- Fetch(인출) : 메모리상의 프로그램 카운터가 가리키는 명령어를 CPU로 인출하여 적재.
- Decode(해석) : 명령어의 해석. 이 단계에서 명령어의 종류와 타겟 등을 판단한다.
- Execute(실행) : 해석된 명령어에 따라 데이터에 대한 연산을 수행한다.
- Writeback(쓰기) : 명령어대로 처리 완료된 데이터를 메모리에 기록한다.
CPU는 기계어(Binary one tool)이기 떄문에 어셈블리어로 소통한다.
but 어셈블리어도 너무 어렵 쏘 어렵 그래서 프로그래밍 언어를 컴파일해서 사용.
통역을 두 번 거쳐 소통하는 느낌인거지
: 데이터를 순서대로 나열하는 방법
앞에서부터 두개씩 비교해서 처음 항목이 다음 항목보다 작으면 그대로 두고 크면 둘의 위치를 변경한다. 이렇게 인덱스 0부터 맨 뒤에 항목은 제외(뒤에서 두번째 항목하고 비교하면 정렬되기에)하고 비교
*a , b = b, a
: 파이썬에서 변수 값 교체하기
input = [4, 6, 2, 9, 1]
# 버블 1번 -> [4, 2, 6, 1, 9] 4번 검사, 9는 정렬
# 버블 2번 -> [2, 4, 1, 6, 9] 3번 검사, 6까지 정렬
# 버블 3번 -> [2, 1, 4, 6, 9] 2번 검사, 4까지 정렬
# 버블 4번 -> [1, 2, 4, 6, 9] 1번 검사. 모두 정렬
# 반복문은 4번 돌았고
# 한 반복은
# 인덱스가 다음 인덱스랑 비교해서 다음인덱스가 작으면 자리를 옮기고
# 그렇게 인덱스가 길이의 -1이 될 때까지 도는걸
def bubble_sort(array):
n = len(array)
for i in range(n-1):
for j in range(n -i -1):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1],array[j]
return array
bubble_sort(input)
print(input) # [1, 2, 4, 6, 9] 가 되어야 합니다!
: 선택해서 정렬한다. 전체를 보고 가장 작은 걸 맨 앞에 정렬하고 그 다음 작은걸 그 다음에 넣고 식으로
input = [4, 6, 1, 9, 2]
# - - - - -
# 앞에서부터 크기를 보고 가장 작은걸 기억한 후 가장 앞에 정렬시킨다
# 셀렉트 1번 -> 4부터 9까지 5번 검사 [1, 4, 6, 2, 9]
# - - - -
# 셀렉트 2번 -> 4부터 9까지 4번 검사 [1, 2, 4, 6, 9]
# - - -
# 셀렉트 3번 -> 4부터 9까지 3번 검사 [1, 2, 4, 6, 9]
# - -
# 셀렉트 4번 -> 6부터 9까지 2번 검사 [1, 2, 4, 6, 9]
#맨 마지막 꺼는 검사 안해도 됨
#셀렉트는 앞에서부터 순서대로 비교를 했을 떄 작으면 그 다음거랑 그 작은 값이랑 비교를 하면 됨
def selection_sort(array):
n = len(array)
for i in range(n - 1):
min_index = i
for j in range(n - i):
if array[i+j] < array[min_index]:
min_index = i + j
array[i], array[min_index] = array[min_index], array[i]
selection_sort(input)
print(input) # [1, 2, 4, 6, 9] 가 되어야 합니다!
선택 정렬이 전체에서 최솟값을 "선택" 하는 거 였다면,
삽입 정렬은 전체에서 하나씩 올바른 위치에 "삽입" 하는 방식이다.
선택 정렬은 현재 데이터의 상태와 상관없이 항상 비교하고 위치를 바꾸지만,
삽입 정렬은 필요할 때만 위치를 변경하므로 더 효율적인 방식이다.
input = [4, 6, 2, 9, 1]
def insertion_sort(array):
n = len(array)
for i in range(1, n):
for j in range(i):
if array[i - j - 1] > array[i - j]:
array[i - j - 1], array[i - j] = array[i - j], array[i - j - 1]
else:
break
return array
insertion_sort(input)
print(input)
def insertion_sort(array):
n = len(array)
for i in range(1, n):
for j in range(i):
if array[i] < array[j]:
array[j], array[i] = array[i], array[j]
return array
강의는 3주차를 다 보고 다시 정리하면서 처음부터 보고있는데
알고리즘 이해가 잘 안되서 시간이 많이 걸린다.
그려가면서 하니까 괜찮긴한데
그래도 하나가 이해가 안되면 진도를 잘 못나가겠다...ㅎㅎ
주말동안 진도 다 빼야되는데..
나는 알고리즘과 친해질 수 있을까..
https://namu.wiki/w/CPU
[스파르타코딩클럽] 쉽게 배우는 알고리즘 KDT 실무형 스프링 백엔드 엔지니어 양성과정 1회차