* JGraphT version: 1.5.0 [also tested on 1.4.0]
* Java version (java -version)/platform: adopt-openjdk-15/windows [also tested on oracle 1.8.0_265/windows]
๋ฌธ์
DeltaSteppingShortestPath๋ ๋์ ์ ์ ์ด ์์ค ์ ์ ์์ 3๊ฐ ์ด์์ ๊ฐ์ฅ์๋ฆฌ ๋จ์ด์ ธ ์๋ ๊ทธ๋ํ์์ ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ฌํ ๋จ๊ณ(์์ ์ฝ๋ฉ ์)
DirectedWeightedMultigraph<String, DefaultWeightedEdge> graph = new DirectedWeightedMultigraph<>(DefaultWeightedEdge.class);
graph.addVertex("v0");
graph.addVertex("v1");
graph.addVertex("v2");
graph.addVertex("v3");
graph.addEdge("v0", "v1");
graph.addEdge("v1", "v2");
graph.addEdge("v2", "v3");
new DeltaSteppingShortestPath<>(graph).getPath("v0", "v3") // this returns null
new DijkstraShortestPath<>(graph).getPath("v0", "v3") // this returns a non-null result
์์๋๋ ํ๋
DeltaSteppingShortestPath๋ DijkstraShortestPath์ ์ ์ฌํ ์๋ฃจ์
์ ์ฐพ์์ผ ํฉ๋๋ค.
๊ธฐํ ์ ๋ณด
@SCHudakov ์ข ๋ด ์ฃผ์๊ฒ ์ต๋๊น?
@d-michail ๋ฌผ๋ก ์ ๋๋ค.
@SChudakov ๋ ๋ฒํท ๊ณ์ฐ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
numOfBuckets = (int) (Math.ceil(maxEdgeWeight / delta) + 1);
์์์ ํ
์คํธ๋ฅผ ์คํํ ๋ ๊ทธ๋ํ์ maxEdgeWeight๊ฐ 1(๋ฐ delta=1)์ด๊ธฐ ๋๋ฌธ์ ๋ฒํท์ ์๋ 2์
๋๋ค.
์ด๊ฒ์ ์ ์ด๋ 3๊ฐ ์ด์์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ด ์๋ ๊ทธ๋ํ๋ฅผ ํ ์ ์๋ ์ด์ ๋ฅผ ๋ช
ํํ ํฉ๋๋ค.
๋ด ๋ก์ปฌ ์ง์ ์ ๋ฒ๊ทธ๋ฅผ ์์ ํ์ต๋๋ค. ์ปค๋ฐ ์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ #972๊ฐ ๋ณํฉ๋ ํ PR์ ์ ์ถํ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ฒํท ์ ๊ณ์ฐ์ด ์ ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ต๋จ ๊ฒฝ๋ก ๊ณ์ฐ ์ค ๋ฒํท ๊ตฌ์กฐ์ ๋ํ ๋ฐ๋ณต์ ๋ชจ๋ ๋ฒํท์ด ํ ๋ฒ๋ง ํต๊ณผ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค. ์ด๊ฒ์ด ์ ํํ๋ ค๋ฉด ๋ฒํท์ ์๊ฐ ceil(L/delta)
์ ๊ฐ์์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ L
๋ ๊ทธ๋ํ์์ ์ต๋จ ๊ฒฝ๋ก์ ์ต๋ ๊ฐ์ค์น์
๋๋ค.
์ฐ๋ฆฌ์ ๊ตฌํ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋ ๋ฒํท ์๊ฐ ์์ต๋๋ค.
numOfBuckets = (int) (Math.ceil(maxEdgeWeight / delta) + 1);
์ ์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฒํท์ ํ ๋น๋ฉ๋๋ค.
private int bucketIndex(double distance) {
return (int) Math.round(distance / delta) % numOfBuckets;
}
๋ฐ๋ผ์ ์ผ๋ถ ๋ฒํท์ ์ฌ๋ฌ ๋ฒ ํต๊ณผํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ชจ๋ ์ํธ ์์ฉ์์ ๋น์ด ์์ง ์์ ์ฒซ ๋ฒ์งธ ๋ฒํท์ผ๋ก ์์ํด์ผ ํฉ๋๋ค.
์ด์ ๋ซ์ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ด ๋ก์ปฌ ์ง์ ์ ๋ฒ๊ทธ๋ฅผ ์์ ํ์ต๋๋ค. ์ปค๋ฐ ์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ #972๊ฐ ๋ณํฉ๋ ํ PR์ ์ ์ถํ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ฒํท ์ ๊ณ์ฐ์ด ์ ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ต๋จ ๊ฒฝ๋ก ๊ณ์ฐ ์ค ๋ฒํท ๊ตฌ์กฐ์ ๋ํ ๋ฐ๋ณต์ ๋ชจ๋ ๋ฒํท์ด ํ ๋ฒ๋ง ํต๊ณผ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค. ์ด๊ฒ์ด ์ ํํ๋ ค๋ฉด ๋ฒํท์ ์๊ฐ
ceil(L/delta)
์ ๊ฐ์์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์L
๋ ๊ทธ๋ํ์์ ์ต๋จ ๊ฒฝ๋ก์ ์ต๋ ๊ฐ์ค์น์ ๋๋ค.์ฐ๋ฆฌ์ ๊ตฌํ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋ ๋ฒํท ์๊ฐ ์์ต๋๋ค.
์ ์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฒํท์ ํ ๋น๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ผ๋ถ ๋ฒํท์ ์ฌ๋ฌ ๋ฒ ํต๊ณผํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ชจ๋ ์ํธ ์์ฉ์์ ๋น์ด ์์ง ์์ ์ฒซ ๋ฒ์งธ ๋ฒํท์ผ๋ก ์์ํด์ผ ํฉ๋๋ค.