์๋ฃ๊ตฌ์กฐ/๐์๊ณ ๋ฆฌ์ฆ - 20
์ค๋ ๋ค์ ๊ฐ์ ๋ชฉ๋ก
- ๊ทธ๋ฆฌ๋ - 2
- ๊ทธ๋ํ ์ต๋จ๊ฒฝ๋ก - 1
๊ทธ๋ฆฌ๋(๋ถ๋ถ ๋ฐฐ๋ญ ๋ฌธ์ , fractional knapsack problem)
๋ฌด๊ฒ์ ํ์ด $k$์ธ ๋ฐฐ๋ญ์ ์ต๋ ๊ฐ์น๋ฅผ ๊ฐ์ง๋๋ก ๋ฌผ๊ฑด์ ๋ฃ๋ ๋ฌธ์
๋ฌผ๊ฑด์ ๋ฌด๊ฒ $w$์ ๊ฐ์น $v$๋ฅผ ๊ฐ์ง
๋ฌผ๊ฑด์ ์ชผ๊ฐ์ ๋ฃ๊ธฐ ๊ฐ๋ฅํ๋ค.
(์ชผ๊ฐ์ ๋ชป๋ฃ๋ ๊ฒฝ์ฐ์ ๋ฌธ์ ๋ฅผ 0/1)
stuffs = [
{"weight": 10, "value": 10},
{"weight": 15, "value": 12},
{"weight": 20, "value": 10},
{"weight": 25, "value": 8},
{"weight": 30, "value": 5},
]
def FractionalKnapsack(maxweight, stuffs):
stuffs = sorted(stuffs, key=lambda x:x["weight"]/x["value"])
value = 0
for stuff in stuffs:
if maxweight - stuff['weight'] < 0:
value += stuff['value'] / stuff['weight'] * maxweight
break
else:
value += stuff['value']
maxweight -= stuff['weight']
return value
FractionalKnapsack(30, stuffs)
์ ํ๋ ๋ฌด๊ฒ๋ก ์ต๊ณ ์ ๊ฐ์น๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์
โ๋ฌด๊ฒ 1๋น ๊ฐ์นโ๊ฐ ๊ฐ์ฅ ํฐ ๊ฒ๋ค์ ๊ณ ๋ฅด๋ฉด ๋๋ค.
๋ฐ๋ผ์ ๋ฌด๊ฒ/๊ฐ์น์ ๋ฐ๋ผ์ ๋ฌผ๊ฑด๋ค์ ์ ๋ ฌํ๊ณ
์์์๋ถํฐ ํ๋์ฉ ๊ฐ๋ฐฉ์ ์ฑ์๋๊ฐ๋ค.
๋ค์์ผ๋ก ๋ฃ์ ๋ฌผ๊ฑด์ด ๋ฃ์ ์ ์๋ ๋ฌด๊ฒ๋ณด๋ค ์ ์ผ๋ฉด, ๋ฌผ๊ฑด์ ์ชผ๊ฐ์ ๋ฃ๋๋ค.
๊ทธ๋ฆฌ๋์ ์๋ชป๋ ์ฌ์ฉ(?)
ํธ๋ฆฌ์์ ์ต์๊ฐ ๋๋๋ก ๊ณ ๋ฅด๋ ๋ฐฉ๋ฒ์ ๊ตฌํ๋ ๋ฌธ์
์ ๊ทธ๋ฆผ์์ ๋งค ์๊ฐ ์ ํ์ง ์ค ๊ฐ์ฅ ์ต์ ์ ๋ต์ ๊ณจ๋์ ๋,
$7 + 12 = 19$๊ฐ ๋๋๋ฐ
์ฌ๋ฐ๋ฅธ ๋ต์ $10 + 5 = 15$๊ฐ ์ต์๊ฐ ๋๋ค.
๋จ์ํ๊ฒ ์์ ํ์์ ํตํด์ ์ ํํ ์ ์๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ํํ์ ๋,
๊ฒฐ๊ณผ๊ฐ๋ค์ ๋น๊ตํด์ ์ต์์ ๊ฐ์ ๊ตฌํ ์ ์๋ค.
์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ
๋ ๋ ธ๋๋ฅผ ์๋ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ
๊ฐ์ค์น ๊ทธ๋ํ์์ ๊ฐ์ ์ ๊ฐ์ค์น ํฉ์ด ์ต์๊ฐ ๋๋๋ก ํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ
๋ฌธ์ ์ข ๋ฅ
- ๋จ์ผ ์ถ๋ฐ ๋จ์ผ ๋์ฐฉ
ํน์ ๋ ธ๋์์ ์ถ๋ฐํด์ ํน์ ๋ ธ๋์ ๋์ฐฉํ๋ ๋ฌธ์ . (u -> v) - ๋จ์ผ ์ถ๋ฐ
ํน์ ๋ ธ๋์์ ๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋์ ๋ํด์ ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ (u -> ๋ชจ๋ ๋ ธ๋) - ์ ์ฒด ์ ๋ชจ๋ ์์ ๋ํ ์ต๋จ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ (๋ชจ๋ ๋ ธ๋ -> ๋ชจ๋ ๋ ธ๋)
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (Dijkstra)
์ฐ๊ฒฐ๋์ด์๋ ๋ ธ๋๋ค์ ํ์ํ๋ฉฐ, ์์ ๋ ธ๋์์ ๊ฐ ๋ ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์
์ฒ์์ ์์ ๋
ธ๋๊น์ง ๊ฐ๋ ๋น์ฉ์ 0, ๋ค๋ฅธ ๋ชจ๋ ๋
ธ๋๋ค๋ก ๊ฐ๋ ๋น์ฉ์ ๋ฌดํ๋๋ก ์ด๊ธฐํ
์์ ๋
ธ๋๋ฅผ ํ์ฌ๋
ธ๋๋ก ํด์ ์์.
ํ์ฌ๋
ธ๋์ ์ธ์ ๋
ธ๋๋ค์ ํ์ํด์, ํ์ฌ ๋
ธ๋์์ ์ธ์ ๋
ธ๋์ ๋๋ฌํ๋ ๋น์ฉ์ด ๊ธฐ์กด์ ๋ค๋ฅธ ๋
ธ๋์์ ์ธ์ ๋
ธ๋์ ๋๋ฌํ๋๋ฐ ๋๋ ๋น์ฉ๋ณด๋ค ์ ๋ค๋ฉด, ๋น์ฉ์ ์
๋ฐ์ดํธ ํ๋ค.
์ด๋ฅผ ๊ณ์ ๋ฐ๋ณตํ๋ฉด ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋ง์ง๋ง
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ์ตํ๋๋๋ก ์จ๋ดค๋๋ฐ, ๋ค์ ๊ฐ์ ๋ค์ ๋ ํ์ธํด๋ด์ผ๊ฒ ๋ค.
-๋-
๋๊ธ๋จ๊ธฐ๊ธฐ