- MethodArgumentNotValidException
- MAKE US
- OpenAPI
- ν¨μ€νΈμΊ νΌμ€XμΌλμ
- spring κ΅¬κΈ μμ λ‘κ·ΈμΈ
- @CreatedDate
- SQL
- mysql
- Java
- κ΅¬κΈ μμ λ‘κ·ΈμΈ
- C++
- docker
- Quick Sort
- node js
- RP 2κΈ°
- Spring
- μμ€ν μννΈμ¨μ΄
- 리λ μ€ λͺ λ Ήμ΄
- springμΌλ‘ https μ μ©
- datagrip
- aligoapi
- Data Structure
- GIT
- java error
- merge sort
- Unity
- Rp2κΈ°
- spring μμ λ‘κ·ΈμΈ
- DATABASE
- SSL
YS's develop story
그리λ μκ³ λ¦¬μ¦ μ 리 λ³Έλ¬Έ
π©π» 그리λ μκ³ λ¦¬μ¦ (νμλ²) μ 리 with Python
π₯ 그리λ μκ³ λ¦¬μ¦ (Greedy Algorithm)μ΄λ?
1. 맀 μκ° μ΅μ μ΄λΌκ³ μκ°λλ κ²½μ°λ₯Ό μ ννλ λ°©μμΌλ‘ μ§νν΄μ μ΅μ’ μ μΈ κ°μ ꡬνλ λ°©μμ λλ€.
2. κ°κ°μ μ νμ κ·Έ μκ° λ³΄μμ λλ κ°μ₯ μ’μ 보μ΄μ§λ§ λμ€μλ μ΅μ μ ν΄κ° μλ μ μμ΅λλ€.
3. μ¦ λ§€ μκ°μ μ νμ locally optimal νμ§λ§ globally optimalνμ§ μμ΅λλ€.
κ·Έλ κΈ°μ 그리λ μκ³ λ¦¬μ¦μΌλ‘ μ΅μ ν΄λ₯Ό μ»μ μ μλ κ²μ΄ μ‘΄μ¬ν©λλ€.
π 그리λ μκ³ λ¦¬μ¦ μμ 1 - λμ λ¬Έμ
μ§λΆν΄μΌ νλ κ°μ΄ 7870μ μΌ λ κ°μ₯ μ μ μμ λμΌλ‘ μ§λΆνλ λ°©λ²μ
그리λ μκ³ λ¦¬μ¦μ νμ©νμ¬ κ΅¬ν μ μμ΅λλ€.
κ°μ₯ ν°λλΆν° μ΅λν μ§λΆν΄μΌ νλ κ°μ μ±μ°λ λ°©μμΌλ‘ ꡬνλλ©°
그리λ μκ³ λ¦¬μ¦μΌλ‘ 맀 μκ° μ΅μ μ΄λΌκ³ μκ°λλ κ²½μ°λ₯Ό μ ννλ©΄ λ©λλ€.
π λμ λ¬Έμ μ½λ
# Greedy1 - Coin Problem
coinList = [5000, 1000, 500, 100, 50, 10]
def greedy1(conList, value):
conList.sort(reverse=True)
totalCount = 0
details = list()
for i in conList:
count = value // i
totalCount += count
value -= count * i
details.append([i, count])
return totalCount, details
print(greedy1(coinList, 7870))
π 그리λ μκ³ λ¦¬μ¦ μμ 2 - Fractional Knapsack Problem
λ¬΄κ² μ νμ΄ kμΈ λ°°λμ μ΅λ κ°μΉλ₯Ό κ°μ§λλ‘ λ¬Όκ±΄μ λ£λ λ¬Έμ μ λλ€.
κ° λ¬Όκ±΄μ λ¬΄κ² wμ κ°μΉ vλ‘ ννλ μ μμ΅λλ€.
물건μ μͺΌκ°€ μ μκ³ λ¬Όκ±΄μ μΌλΆλΆμ λ°°λμ λ£μ μ μμ΅λλ€.
π Fractional Knapsack Problem μ½λ
# Greedy2 - Fractional Knapsack Problem
dataList = [(10, 10), (15, 12), (20, 10), (25, 8), (30, 5)]
def knapsack(dataList, capacity):
dataList = sorted(dataList, key=lambda x: x[1] / x[0], reverse=True)
details = list()
totalValue = 0
for i in dataList:
if capacity - i[0] >= 0:
capacity -= i[0]
totalValue += i[1]
details.append([i[0], i[1], 1])
else:
fractions = capacity / i[0]
totalValue += fractions * i[1]
details.append([i[0], i[1], fractions])
break
return totalValue, details
print(knapsack(dataList, 30))
π₯ 그리λ μκ³ λ¦¬μ¦μ νκ³
그리λ μκ³ λ¦¬μ¦μ λ°λμ μ΅μ μ ν΄λ₯Ό ꡬν μ μλ μκ³ λ¦¬μ¦μ΄ μλλλ€.
κ·Έ μκ°μ κ°μ₯ μ’μ 보μ΄λ μ νμ ν΅ν΄ μ΅μ μ ν΄μ κ°κΉμ΄ κ°μ ꡬνλ μκ³ λ¦¬μ¦μ λλ€.
κ·Έλ κΈ°μ 그리λ μκ³ λ¦¬μ¦μΌλ‘λ μ΅μ ν΄λ₯Ό ꡬν μ μλ λ¬Έμ λ μμ΅λλ€.
μ κ·Έλνμμ κ°μ₯ μμ κ°μ μ°Ύμ leaf nodeκΉμ§ κ°λ κ²½λ‘λ₯Ό μ°Ύλ λ¬Έμ μμ...
그리λ μκ³ λ¦¬μ¦μΌλ‘ κ°μ₯ μμ κ°μ μ°Ύμ κ²½λ‘λ₯Ό μ°Ύλλ€λ©΄ 7 -> 12 = 19 μΌ κ²μ λλ€.
νμ§λ§ μ€μ λ‘ κ°μ₯ μμ κ°μ 10 -> 5μ΄λ©° 15κ° κ΅¬νκ³ μ νλ κ°μ λλ€.
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦ μ 리 (0) | 2021.08.14 |
---|---|
λλΉ μ°μ νμ (BFS), κΉμ΄ μ°μ νμ (DFS) μ 리 (0) | 2021.08.03 |
μμ°¨ νμ, μ΄μ§ νμ μ 리 (2) | 2021.08.01 |
ν΅ μ λ ¬ (Quick Sort) μ 리 (0) | 2021.07.31 |
λ³ν© μ λ ¬ (Merge Sort) μ 리 (0) | 2021.07.31 |