< Homework #1 >
1. ์๋ ๋ฌธ์ ์ ๋ํ recursive algorithm ์ ์ค๊ณํ๊ณ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ถ์ํ์ธ์
(๋ฐ๋ณต๋ฌธ ์ฌ์ฉ ๊ธ์ง , ์ฌ๊ทํธ์ถ๋ง ์ฌ์ฉํ๊ธฐ)
• ๋ฐฐ์ด์์ ์ต์๊ฐ ์ฐพ๊ธฐ
• ๋ฐฐ์ด์ ์์์ ์ดํฉ ๊ณ์ฐํ๊ธฐ
• Selection Sort
2. Pancake Sorting
• ๊ต์ฌ Exercise 9(a),(b) in Chapter 1 of [E] (page 49)
• (c) ๋ ์ต์
Homework #1 (3/26๊น์ง)
• ์๋ ๋ฌธ์ ์ ๋ํ recursive algorithm์ ์ค๊ณํ๊ณ
์๊ฐ๋ณต์ก๋๋ฅผ ๋ถ์ํ์ธ์
(๋ฐ๋ณต๋ฌธ ์ฌ์ฉ ๊ธ์ง, ์ฌ๊ทํธ์ถ๋ง ์ฌ์ฉํ๊ธฐ)
• ๋ฐฐ์ด์์ ์ต์๊ฐ ์ฐพ๊ธฐ
• ๋ฐฐ์ด์ ์์์ ์ดํฉ ๊ณ์ฐํ๊ธฐ
• Selection Sort
• Pancake Sorting
• Exercise 9(a),(b) in Chapter 1 of [E] (page 49)
• (c)๋ ์ต์
๐1) ๋ฐฐ์ด์์ ์ต์๊ฐ ๊ตฌํ๊ธฐ -> ์ฌ๊ท
< ํ์ด์ฌ >
def min(x, y):
if x < y :
return x
else:
return y
def min_array(array, len):
if len == 1:
return array[0]
else:
return min(array[len - 1], min_array(array, len - 1))
temp_array = [33, 44, 1, 66, 139, 90, 45, 23]
print (min_array(temp_array, len(temp_array)))
์๊ฐ๋ณต์ก๋๋ O(n)
# ๋ถ์
์ฃผ์ด์ง Python ์ฝ๋์์ ํจ์ ์ ์๊ฐ ๋ณต์ก๋ min_array๋ O(n)์ ๋๋ค. ์ฌ๊ธฐ์ n์ ์ ๋ ฅ ๋ฐฐ์ด์ ๊ธธ์ด์ ๋๋ค.
์ด min_arrayํจ์๋ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์์ ์ต์ ์์๋ฅผ ์ฐพ์ต๋๋ค. ๊ฐ ์ฌ๊ท ํธ์ถ์์ ํจ์๋ ์ ๋ ฅ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ 1์ฉ ์ค์ด๊ณ ์์ ์ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํฉ๋๋ค. ์ด ํจ์๋ ๋ํ min๊ฐ ์ฌ๊ท ํธ์ถ์์ ํจ์๋ฅผ ํ ๋ฒ ํธ์ถํฉ๋๋ค. ํจ์๋ ์์ ์ ์ฌ๊ท์ ์ผ๋ก n๋ฒ ํธ์ถํ๋ฏ๋ก(์ฌ๊ธฐ์ n์ ์ ๋ ฅ ๋ฐฐ์ด์ ๊ธธ์ด์) ํจ์์ ์๊ฐ ๋ณต์ก๋๋ min_arrayO(n)์ ๋๋ค.
์ด minํจ์๋ ์ ๋ ฅ ๊ฐ์ ๊ด๊ณ์์ด ์ผ์ ํ ์์ ์์ ์ ์ํํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ O(1)์ ๋๋ค.
๋ฐ๋ผ์ ์ฃผ์ด์ง ์ฝ๋์ ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ O(n)์ด๋ฉฐ, ์ด๋ ํจ์์ ์๊ฐ ๋ณต์ก๋์ ์ํด ์ง๋ฐฐ๋ฉ๋๋ค min_array.
๐2) ๋ฐฐ์ด์ ์์์ ์ดํฉ ๊ณ์ฐํ๊ธฐ -> ์ฌ๊ท
< ํ์ด์ฌ >
def recursive(numbers):
print("receive : ", numbers)
if len(numbers) < 2:
print("end!!")
return numbers.pop()
else:
pop_num = numbers.pop()
print("pop num is : ", pop_num)
print("rest list is : ", numbers)
sum = pop_num + recursive(numbers)
print("sum is : ", sum)
return sum
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(recursive(numbers))
# ๋ถ์
์ด recursiveํจ์๋ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ์ฌ ๋ชฉ๋ก์ ์์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๊ฐ ์ฌ๊ท ํธ์ถ์์ ํจ์๋ ๋ชฉ๋ก์์ ๋ง์ง๋ง ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋๋จธ์ง ๋ชฉ๋ก์ ์ฌ์ฉํ์ฌ ์์ ์ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํฉ๋๋ค. ์ด ํจ์๋ ๋ํ ์ผ์ ํ ์์ ์์ ์ ์ํํฉ๋๋ค. ์ฆ, ์ ๊ฑฐ๋ ์์๋ฅผ ๋๋จธ์ง ์์์ ํฉ์ ์ถ๊ฐํฉ๋๋ค. ํจ์๋ ์์ ์ ์ฌ๊ท์ ์ผ๋ก n๋ฒ ํธ์ถํ๋ฏ๋ก(์ฌ๊ธฐ์ n์ ์ ๋ ฅ ๋ชฉ๋ก์ ๊ธธ์ด์) ํจ์์ ์๊ฐ ๋ณต์ก๋๋ recursiveO(n)์ ๋๋ค.
๊ฐ ์ฌ๊ท ํธ์ถ์์ ์ํ๋๋ ์ผ์ ํ ์์ ๋์ ๊ณ ์ ๋ ์์ ๋์ด๋ฉฐ ์ ๋ ฅ ๋ชฉ๋ก์ ํฌ๊ธฐ์ ์์กดํ์ง ์๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฃผ์ด์ง ์ฝ๋์ ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ O(n)์ด๋ฉฐ, ์ด๋ ํจ์์ ์๊ฐ ๋ณต์ก๋์ ์ํด ์ง๋ฐฐ๋ฉ๋๋ค recursive.
๐3)
โป ์๋ก ์๊ฒ ๋ ํ์ด์ฌ ๋ฌธ๋ฒ
lst = [11] + [22]
print(lst)
< ์ฝ๋ >
def selectionSort(xs):
if xs != []:
smallest = min(xs)
xs.remove(smallest)
return [smallest] + selectionSort(xs)
else:
return []
lst = [11, 22, 33, 44, 55, 9 ,1, 3]
print(selectionSort(lst))
# ๋ถ์
์ฃผ์ด์ง Python ์ฝ๋์์ ํจ์ ์ ์๊ฐ ๋ณต์ก๋ selectionSort๋ O(n^2)์ ๋๋ค. ์ฌ๊ธฐ์ n์ ์ ๋ ฅ ๋ชฉ๋ก์ ๊ธธ์ด์ ๋๋ค.
์ด selectionSortํจ์๋ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์์ ๋ชฉ๋ก์ ์ ๋ ฌํฉ๋๋ค. ๊ฐ ์ฌ๊ท ํธ์ถ์์ ํจ์๋ ์ ๋ ฅ ๋ชฉ๋ก์์ ์ต์ ์์๋ฅผ ์ฐพ์ ๋ชฉ๋ก์์ ์ ๊ฑฐํฉ๋๋ค. ์ด ํจ์๋ ๋ํ ๋๋จธ์ง ๋ชฉ๋ก๊ณผ ํจ๊ป ์์ ์ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๊ณ ์ต์ ์์๋ฅผ ์ ๋ ฌ๋ ๋ชฉ๋ก์ ์ฐ๊ฒฐํฉ๋๋ค. ํจ์๋ ์์ ์ ์ฌ๊ท์ ์ผ๋ก n๋ฒ ํธ์ถํ๊ณ (์ฌ๊ธฐ์ n์ ์ ๋ ฅ ๋ชฉ๋ก์ ๊ธธ์ด์) ๊ฐ ์ฌ๊ท ํธ์ถ์์ ์ต์ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด ์ ํ ๊ฒ์์ ์ํํ๊ณ ์ต์ ์์๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ์ ํ ์๊ฐ์ ์ํํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ํจ์ selectionSort๋ O(n^2)์ ๋๋ค.
๊ฐ ์ฌ๊ท ํธ์ถ์์ ์ํ๋๋ ์ผ์ ํ ์์ ๋์ ๊ณ ์ ๋ ์์ ๋์ด๋ฉฐ ์ ๋ ฅ ๋ชฉ๋ก์ ํฌ๊ธฐ์ ์์กดํ์ง ์๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฃผ์ด์ง ์ฝ๋์ ์ ์ฒด ์๊ฐ๋ณต์ก๋๋ O(n^2)์ด๋ฉฐ ํจ์์ ์๊ฐ๋ณต์ก๋๊ฐ ์ง๋ฐฐ์ ์ด๋ค selectionSort.
'Algorithm๐ค > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ์๐ฅ์ด ๋์ฒด ๋ญ๊ฐ์? ๊ถ๊ธํด์ !! (0) | 2023.05.15 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] Dynamic programming (๋์ ๊ณํ๋ฒ) ์์ ์ ๋ณต with Python (0) | 2023.05.15 |