お世話になります。
以下のようなファイルを利用して、最短経路を求めるスクリプトをご教示いただけないでしょうか。
Metricがもっともすくないものが良。
可能な限りC言語以外で実現したいと考えております。
## 検索してみたのですが、どうもC言語のプログラムが多そうです。
(snip)
SourceDestMetric
121
131
415
434
451
461
475
484
492
4107
4116
41214
4139
41412
41523
41627
41720
18191
1974
20184
20192
21192
242
231
272
・・・・・・
・・・・・
・・・・
・・・
・・
(snip)
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
source/dest/metric などの情報をどのように入手するかは全く考えていません. 最終的に $metric{$i}{$j} に $i から $j への metric が入っていれば OK です.
ああ, 1点言っておくべきことがあります. 実際にはこれは「最短経路」を見つけていないので, 「最短経路」を見つけるためにはもうちょっと処理が必要です. $dist{$i}{$j} を更新するときに $via{$i}{$j} = $k も実行して, 「$i から $j への最短経路は $k を通る」ということを記録しておくんでしょう.
No.3
- 回答日時:
ちょいと調べましたら, Warshall-Floyd あたりが安全そうです.
ある程度プログラムが書けるなら調べたものをプログラムにした方がよいと思いますが一応 Perl で. $metric{$i}{$j} が $i から $j への metric とします (存在しなければ undef). あと, $n がソース (デスティネーションでも同じだけど) の個数です:
my %dist;
for my $i (1 .. $n) {
for my $j (1 .. $n) {
$dist{$i}{$j} = $metric{$i}{$j};
}
$dist{$i}{$i} = 0;
}
for my $k (1 .. $n) {
for my $i (1 .. $n) {
for my $j (1 .. $n) {
# Calculate the distance from $i to $j with at most $k hops
my $s = (defined $dist{$i}{$k} && defined $dist{$k}{$j}) ? $dist{$i}{$k} + $dist{$k}{$j} : undef;
if (! defined $dist{$i}{$j} || (defined $s && $s < $dist{$i}{$j})) {
$dist{$i}{$j} = $s;
}
}
}
}
多分動くと思うけど, あんまり自信なし. ちなみに, n^3 くらいの時間がかかります.
ご親切にどうもありがとうございます。
このスクリプトですが、"Source Dest Metric"等の情報を外部ファイルとして取り込む必要があるのでしょうか。
(snip)
Source Dest Metric
1 2 1
1 3 1
・・・
(snip)
No.2
- 回答日時:
ああ, 「1点から他の点への最短経路」と「全点間の最短経路」ではアルゴリズムが違う (同じでもいいんだけど変えた方が効率的) ので, どちらかによって方針が変わります.
「1点から他の点への最短経路」だと Dijkstra のアルゴリズムがいいと思います. それほど難しくありませんし, ほぼベストに近い時間でできると思います.
「全点間の最短経路」の方は, Dijkstra のアルゴリズムを繰り返してもいいけど他にもやりかたはあったはずです. 忘れましたが.
そうそう, 言語を決めてもらえると話が楽になります.
なるほどです。勉強になります。
言語は非コンパイル言語であれば、何でも良いと思っております。
PERL,SHELLとかのスクリプトで実現可能でしょうか。
「全点間の最短経路」を見つけたいと思っております。
参考サイトとかないでしょうか。。
No.1
- 回答日時:
「できれば C 以外」という理由がよくわからんのだけど, 「C で書かれたものを別の言語にコンバートする」のはダメ?
metric に負のものがなければ Dijkstra の方法でできそうなんだけど, どうやって優先順位キュー (ヒープ) を作りますかねぇ.
"C"で書かれたものを別の言語にコンバートすることでも、問題ありません。「できれば C 以外」というのは、私が理解できない分野なので、、、すみません。
metricに負の値ものはありません。
Bestな経路が1つ抽出されれば良いのですが、むずかしそうですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学受験 関西外国語大学の国際共生学科、英米語学科(Super IESプログラム)、大阪外語専門学校、同志社大 1 2023/03/29 22:34
- 電車・路線・地下鉄 jr定期を悪用出来てしまう件。 自宅からの最寄り駅であるa駅から職場からの最寄り駅であるc駅に行くた 5 2022/05/08 18:45
- タクシー タクシーの運賃ってなぜJRのような大都市近郊区間のような最短経路の運賃計算にしないのですか? 実際の 7 2023/06/27 11:30
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- その他(IT・Webサービス) 乗換案内(区間の一部を指定して有料特急を使用する検索) 4 2023/06/25 22:26
- その他(言語学・言語) 外国語問題 1 2022/07/21 15:21
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
アルゴリズムとプロトコールの違い
-
CRC-CCITT16の算出法
-
複数の点を最短距離で全て繋ぐ...
-
C言語初心者の質問失礼いたしま...
-
アルゴリズム(2分探索木)の問題...
-
整列・探索アルゴリズム
-
ハッシュアルゴリズム
-
掃き出し法のアンダーフロー
-
一番近い組み合わせを見つけるには
-
ガボールフィルタ
-
対話型遺伝的アルゴリズムにつ...
-
クラスタリングについて
-
OSI参照モデルと関連の質問
-
偏りのある乱数のアルゴリズム
-
パズルが好きな人ってプログラ...
-
経路探索について
-
VC++で通信型オセロを作りたい...
-
基数変換のアルゴリズムの問題
-
フリーセルの難易度について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
Dijkstraて
-
Stuck
-
BCDについて
-
[ EXCEL VBA ] 図形を読み込む...
-
期間重複チェックがわかりません
-
アルゴリズムとプロトコールの違い
-
複数の点を最短距離で全て繋ぐ...
-
グループを均等に分けるには?...
-
5人のテストの点数を入力すると...
-
ハノイの塔のさいきアルゴリズ...
-
ハッシュアルゴリズム
-
偏りのある乱数のアルゴリズム
-
C♯で電卓を作成しています。演...
-
多変数関数の最小値を求めるプ...
-
あいまい検索(文字列一致率)
-
JPEG圧縮で8×8に分割する理由に...
-
シードを考慮したトーナメント...
-
画像から文字を認識してテキス...
-
vbaで、連立方程式を解く方法に...
おすすめ情報