2022. 9. 22. 00:14ㆍ스파르타코딩클럽[AI트랙 3기]/자료구조와 알고리즘
3-1 오늘배울 것
스택, 큐의 개념과 활용법
해쉬의 개념과 활용법
트리, 힙의 개념과 활용법
정렬: 데이터를 순서대로 나열하는 방법
스택과 큐: 들어가고 나오는곳이 정해져있는 자료
스택은 맨위에들어가고 맨위에 나옴. 큐는 맨위에 들어가고 맨처음게 나옴.
해쉬 : 블록체인에 쓰임
3-2 정렬 –1
-정렬 : 데이터를 순서대로 나열하는 방법
-버블정렬 : 자료간 비교하면서 교환하는 방법
for I in range(N)
if a< b :
a,b = b, a
하면 앞뒤로 교체해줌.
버블 정렬 코드는
N=len(array)
for I in range(N):
for j in range(N – I – 1):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
위 함수의 시간복잡도는 ? for문별로 n의 길이만큼 반복 -> O(n^2)
버블정렬은 과연 효율적인 방법인가?
3-2 정렬 –2
-선택정렬 : 선택해서 정렬(2중 반복문 사용)
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]
print(i+j)
위함수의 시간복잡도는 마찬가지로 O(n^2)
-삽입정렬 : 선택정렬은최소값 선택, 삽입정렬은 하나씩 올바른 위치에 삽입하는 것.
n=len(array)
for I in range(1, n)
for j in range(i)
print(i-j)
if array[i-j-1]>array[i-j]:
array[i-j-1], array[i-j] = array[i-j], array[i-j-1]
else: #조건에 안맞으면 반복문을 끝내겠다.
break
선택정렬은 비교를 안해도 되는 순간에는 break하게 됨. 그래서 시간복잡도가 N만큼 됨.
3-4 정렬 – 3
병합정렬
array1=[]
array2=[]
def merge(array1, array2):
array_c = []
array1_index = 0
array2_index = 0
while array1_index < len(array1) and array2_index < len(array2)
if array_c.append(array1[array1_index])
array1_index +=1
else:
array_c.append(array2[array2_index])
array2_index +=1
if array1_index == len(array1):#array1은 끝났지만 array2가 남아있으면 끝까지 간다.
while array2_index < len(array2):
array_c.append([array2_index])
array2_index +=1
if array2_index == len(array2):#array2는 끝났지만 array1이 남아있으면 끝까지 간다.
while array1_index < len(array1):
array_c.append([array1_index])
array1_index +=1
-분할정복: 두 개의 문제로 분리하고 각각해결한 다음 결과를 모아서 원래의 문제를 해결하는 전략. 병합하기
def merge_sort(arrray):
if len(array) <= 1:
return array
mid = len(array) // 2 #우선 중간값 구하기
left_array = merge_sort(array[:mid])
right_array = merge_sort(array[mid:])
return merge(left_array, right_array)
감이 안오면 중간중간 print
merge 시간복잡도 > O(N)
merge_sort 시간복잡도 >
'스파르타코딩클럽[AI트랙 3기] > 자료구조와 알고리즘' 카테고리의 다른 글
| [자료구조와 알고리즘] #4 (1) | 2022.09.20 |
|---|---|
| [자료구조와 알고리즘] #3 (0) | 2022.09.20 |
| [자료구조와 알고리즘] #2 (1) | 2022.09.20 |
| [자료구조와 알고리즘] #1 (0) | 2022.09.20 |