GenericFibonacciHeap์ ๋ํ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์ด๋ฏธ jheap์ผ๋ก ๊ต์ฒดํ์ผ๋ฉฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ผ๋ฐ์ด ์๋ FibonacciHeap ํด๋์ค์ ๋ํด์๋ ๋์ผํ ์์ ์ ์ํํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ํนํ ๋ชจ๋ ธํค ํ ๊ตฌํ์ด Djikstra/ClosestFirstIterator์ ๊ฐ์ ์ฉ๋์ ๋ ์ ์ต์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ด ์์ ์ ์ผ๋ถ๋ก ์ฑ๋ฅ ํ๊ท๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด ํ์ฌ ์นจ์ ์ต์ ํ(๋ฐ ๊ธฐ๋ณธ ์ด์ค)์ ์์กดํ๊ณ ์๋ ๊ฒฝ์ฐ๋ฅผ ํ ์คํธํด์ผ ํฉ๋๋ค.
์ฑ๋ฅ ๋น๊ต๋ฅผ ํ๊ณ ์ถ์ต๋๋ค.
์ฑ๋ฅ ๋น๊ต๋ฅผ ํด๋ณด์๋๋ฐ ๊ฒฐ๊ณผ๋ ์ด๋ ์ต๋๋ค
ํผ๋ณด๋์น ํ ๋ค์ดํฐ๋ธ
|ํ
์คํธ ์ ํ | ๋ค์ต์คํธ๋ผ, us/op | ๊ฐ์ฅ ๊ฐ๊น์ด ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์, us/op |
|-------|-------------------|------- ------------------------|
| ์์ ํ 100 | 165 | 165 |
| ์์ ํ 300 | 1903 | 1920๋
|
| ์์ ํ 500 | 9799 | 9526 |
| ์์ ํ 1000 | 54701 | 54474 |
| ์ผ๊ฐ. 1000 | 507 | 510 |
| ์ผ๊ฐ. 3000 | 1702 | 1695 |
| ์ผ๊ฐ. 5000 | 3399 | 3329 |
| ์ผ๊ฐ. 10000 | 7420 | 7386 |
| ์ผ๊ฐ. 20000 | 17138 | 16867 |
| ์ผ๊ฐ. 40000 | 38579 | 38707 |
JHeaps ํผ๋ณด๋์น ํ
|ํ
์คํธ ์ ํ | ๋ค์ต์คํธ๋ผ, us/op | ๊ฐ์ฅ ๊ฐ๊น์ด ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์, us/op |
|-------|-------------------|------- ------------------------|
| ์์ ํ 100 | 172 | 173 |
| ์์ ํ 300 | 2013 | 1984๋
|
| ์์ ํ 500 | 11371 | 10108 |
| ์์ ํ 1000 | 56411 | 56650 |
| ์ผ๊ฐ. 1000 | 455 | 464 |
| ์ผ๊ฐ. 3000 | 1534 | 1595 |
| ์ผ๊ฐ. 5000 | 2927 | 3100 |
| ์ผ๊ฐ. 10000 | 6985 | 6892 |
| ์ผ๊ฐ. 20000 | 15904 | 16159 |
| ์ผ๊ฐ. 40000 | 35970 | 36313 |
JHeap ํ์ด๋ง ํ
|ํ
์คํธ ์ ํ | ๋ค์ต์คํธ๋ผ, us/op | ๊ฐ์ฅ ๊ฐ๊น์ด ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์, us/op |
|------------------------|---------------------|----- --------------------------|
| ์์ ํ 100 | 166 | 165 |
| ์์ ํ 300 | 2017 | 2163 |
| ์์ ํ 500 | 12015 | 11453 |
| ์์ ํ 1000 | 61985 | 63824 |
| ์ผ๊ฐ. 1000 | 373 | 375 |
| ์ผ๊ฐ. 3000 | 1224 | 1227 |
| ์ผ๊ฐ. 5000 | 2637 | 2895 |
| ์ผ๊ฐ. 10000 | 5840 | 5941 |
| ์ผ๊ฐ. 20000 | 15251 | 15217 |
| ์ผ๊ฐ. 40000 | 30799 | 33975 |
์ฑ๋ฅ ์ฐจ์ด๋ ๊ทธ๋ ๊ฒ ํฌ์ง ์์ต๋๋ค.
ํ์ฌ ์ด์ค ๋ชจ๋ ธํค ๊ธฐ์ ํ์ผ๋ก ํ ์คํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์์ธ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๊ฒ์ ์ฒ์์ ๊ฑฐ๋ฆฌ๊ฐ 0์ธ ์์ ์ ์ ์ ์ฝ์ ํ ๋ค์(currentMin = 0) ์ ๊ฑฐํ ๋ค์(ํ์ฌ ํ์ currentMin์ null์) ๊ฑฐ๋ฆฌ๊ฐ k์ธ ๋ ธ๋๋ฅผ ์ฝ์ ํ ๋ค์(currentMin์ด k๊ฐ ๋จ) ๊ฑฐ๋ฆฌ๊ฐ ์๋ ๋ ธ๋๋ฅผ ์ฝ์ ํ ๋ ๋ฐ์ํฉ๋๋ค. m < k(k < m ๋๋ฌธ์ ์์ธ๊ฐ ๋ฐ์ํจ). Wikipedia์๋ โโ"๋ชจ๋ ธํค ์ฐ์ ์์ ๋๊ธฐ์ด์ ํ์ ์ถฉ๋ถ ์กฐ๊ฑด์ ๊ฐ์ฅ ์ต๊ทผ์ ์ถ์ถํ ๊ฒ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ์ ์์๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ์๋ํ์ง ์๋ ๊ฒ์ ๋๋ค"๋ผ๊ณ ๋ช ์๋์ด ์์ต๋๋ค. ๊ฑฐ๋ฆฌ๊ฐ 0์ธ ๊ผญ์ง์ ์ ์ ๊ฑฐํ ํ currentMin ๊ฐ์ด null์ด ๋๋ฉด ์ ๋๋ค๊ณ ์๊ฐํ์ง๋ง ์ฝ๋์์๋ ํน์ํ ๊ฒฝ์ฐ๋ก ์ฃผ์ ์ฒ๋ฆฌ๋์ด ์์ด ์ด๊ฒ์ด ๋ง๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ธฐ์ ํ์ ํ์ฌ ์ต์๊ฐ๋ณด๋ค ๋ฎ์ ํค๋ฅผ ๊ฐ์ง ์์๋ฅผ ์ฝ์ ํ ์ ์๋๋ก ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ๊ตฌํ๋ฉ๋๋ค.
Dijkstra๋ฅผ ์ฝ๊ฐ ๋ค์ ์์ฑํ๋ฉด ์๋ํฉ๋๋ค. ๋จผ์ findMin()
๋ฅผ ํธ์ถํ ๋ค์ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ์ํํ๊ณ ๋ง์ง๋ง์ผ๋ก delMin()
๋ฅผ ํธ์ถํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ, Dijkstra๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ชจ๋ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ๋ฐ๋ณตํ๊ณ ๊ฒฝ๊ณ n C
๋ฅผ ๊ณ์ฐํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ C
๋ ๊ฐ์ฅ ํฐ ๊ฐ์ฅ์๋ฆฌ ๊ฐ์ค์น์ด๊ณ n
๋ ๋
ธ๋ ์์
๋๋ค. ์ด ๊ฒฝ๊ณ๋ ๊ธฐ์ ํ์ ์ด๊ธฐํํ ๋ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
@Toptachamann ๊ธฐ์ ํ์ ๋ณ๊ฒฝํ์ฌ ํ์ฌ ์ต์๊ฐ์ด ์๋ ๋ง์ง๋ง์ผ๋ก ์ญ์ ๋ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์๋ฅผ ๋ฐฐํฌํ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ ๊ฒํ๋ฉด ์ฆ์ ์๋ํฉ๋๋ค.
@Toptachamann ๊ตฌํ์ ๋ณ๊ฒฝํ์ผ๋ฉฐ ์ด์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ถ์ํ์ง ์์์ผ๋ฏ๋ก maven install์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ๋ก ์ค์นํ ํ ๋ฒ์ 0.9-SNAPSHOT์ ๋ํด ํ ์คํธํด์ผ ํฉ๋๋ค.
@d-michail ์ด์ ์ ์๋ํ์ง ์์ต๋๋ค. ์์ ์ ์ ์ด ์ญ์ ๋ ํ ๋ฒํท ์ธ๋ฑ์ค๋ -1์ด ๋์ง๋ง currentMin์ ์ ์ง๋ฉ๋๋ค. ๋๊ฐ๋ ๋ชจ๋ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ์ํํ๊ณ ๋ค๋ฅธ ์ต์ ์์๋ฅผ ์ญ์ ํ๋ ค๊ณ ์๋ํ๋ฉด java.lang.ArrayIndexOutOfBoundsException: -1
๊ฐ ๋ฐ์ํฉ๋๋ค.
@Toptachamann ์ฃ์กํฉ๋๋ค. ์์ ๋ฒ๊ทธ๊ฐ ์์์ต๋๋ค. ํ ์คํธํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ํ ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ์ํํ์ผ๋ฉฐ ํ์ฌ ์ต์ ์ ๋ฐ์ดํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋์์ต๋๋ค.
๋ค์์ ์ด์ค ๋ชจ๋ ธํค ํ์ ๋ํ ๊ฒฐ๊ณผ์ ๋๋ค.
|ํ
์คํธ ์ ํ | ๋ค์ต์คํธ๋ผ | ๊ฐ์ฅ ๊ฐ๊น์ด ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์ |
|--------------------------------|---------------- |------------------------|
| 100์ ์๋ฃํ์ญ์์ค. ๋น. 10 | 172 | 172 |
| 300์ ์๋ฃํ์ญ์์ค. ๋น. 10 | 2458 | 2408 |
| 500๊น์ง ์๋ฃํ์ญ์์ค. ๋น. 10 | 11104 | 10052 |
| 1000์ ์๋ฃํ์ญ์์ค. ๋น. 10 | 57028 | 56944 |
| 100์ ์๋ฃํ์ญ์์ค. ๋น. 100 | 185 | 175 |
| 300์ ์๋ฃํ์ญ์์ค. ๋น. 100 | 2381 | 2464 |
| 500๊น์ง ์๋ฃํ์ญ์์ค. ๋น. 100 | 11320 | 11313 |
| 1000์ ์๋ฃํ์ญ์์ค. ๋น. 100 | 64749 | 61865 |
| 100์ ์๋ฃํ์ญ์์ค. ๋น. 1000 | 190 | 180 |
| 300์ ์๋ฃํ์ญ์์ค. ๋น. 1000 | 2315 | 2303 |
| 500๊น์ง ์๋ฃํ์ญ์์ค. ๋น. 1000 | 11034 | 11792 |
| 1000์ ์๋ฃํ์ญ์์ค. ๋น. 1000 | 65407 | 68292 |
| 100์ ์๋ฃํ์ญ์์ค. ๋น. 10000 | 186 | 193 |
| 300์ ์๋ฃํ์ญ์์ค. ๋น. 10000 | 2390 | 2359 |
| 500๊น์ง ์๋ฃํ์ญ์์ค. ๋น. 10000 | 12667 | 14156 |
| 1000์ ์๋ฃํ์ญ์์ค. ๋น. 10000 | 72096 | 71001 |
| ์ผ๊ฐ. 1000 | 418 | 418 |
| ์ผ๊ฐ. 3000 | 1347 | 1349 |
| ์ผ๊ฐ. 5000 | 2426 | 2486 |
| ์ผ๊ฐ. 10000 | 6798 | 6559 |
| ์ผ๊ฐ. 20000 | 16375 | 16257 |
| ์ผ๊ฐ. 40000 | 36574 | 36203 |
๋๋ ๊ทธ๋ค์ด ์คํ ์๊ฐ์ ์ด๋ป๊ฒ ๋ณ๊ฒฝํ๋์ง ๋ณด๊ธฐ ์ํด ๋ค๋ฅธ ๊ฐ์ฅ์๋ฆฌ ๊ฐ์ค์น ์ํ์ ์ฌ์ฉํ์ต๋๋ค. ๋ํ ์๋ ํฅ์์ด ์์ต๋๋ค. ์์ ํ ๊ทธ๋ํ์ ๋ํ ์ต์์ ๊ฒฐ๊ณผ๋ ํผ๋ณด๋์น ํ์ ๊ฒฐ๊ณผ์ ๋์ผํฉ๋๋ค. ํ์ฌ ํ์ด๋ง ํ์ ํฌ์ ๊ทธ๋ํ์์ ๋ค๋ฅธ ํ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฐ์ด๋ฉ๋๋ค.
@Toptachamann ๋ด๊ฐ ๋ณผ ์ ์๋ ๊ฒ์๋ ์ง์ ์ด ์์ต๋๊น?
@jsichi ๋ฒค์น๋งํฌ ๋ถ๊ธฐ๋ฅผ ํฌํฌ๋ก ํธ์ํ์ต๋๋ค. ๊ฑฐ๊ธฐ์์ ๋๋ ๋จ์ง Dijkstra์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฒค์น๋งํนํ์ต๋๋ค. deprecation์ ํด์ผ ํ๋์?
์, ์ง์ ์ค๋จ์ ์งํํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ต์ ์ ํ ๊ตฌํ์ ์ ํํ๋ ๋ฐฉ๋ฒ(๋๋ MaximumWeightBipartiteMatching์์์ ๊ฐ์ด ์ฌ์ฉ์๊ฐ ์ ํํ๋๋ก ํ์ฉ)์ ๋ฌด์์ ๋๊น?
๋๋ Dijkstra์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ๊ธฐ๋ณธ ํ์ ๊ฐ๊ณ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ํ์ ์ ๊ณตํ๋๋ก ํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ๊ฐ์ง ๋ฉด์์ ๋ ์ ์ฐํฉ๋๋ค. 1. ์ฌ์ฉ์์๊ฒ ์์ฒด ๋ฒค์น๋งํฌ๋ฅผ ์ํํ๊ณ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ํ์ ์ ํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. 2. jheaps์ ํ์ด ๋ค์ ๊ตฌํ๋๊ฑฐ๋ ์ด๋ป๊ฒ๋ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ์ด ์ ๊ทผ ๋ฐฉ์์ผ๋ก Dijkstra์ ์๊ณ ๋ฆฌ์ฆ์์ ๊ธฐ๋ณธ ํ ๊ตฌํ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ ํธ๋ฆฌํฉ๋๋ค.
Ps Pairing ํ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ edge weight์ ์ํ์ ์ด ๋ฎ์ง ์๊ณ ๋ชจ๋ ธํค ํ์ ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ค์น์ ๋ฒ์๊ฐ ํฌ์ง ์์ ๊ฒฝ์ฐ Dijkstra ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ ธํค ํ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฑ๋ฅ ๋น๊ต๋ฅผ ํ๊ณ ์ถ์ต๋๋ค.