解決済みの質問
プログラムの性能改善の課題が出ているのですが、アルゴリズムとしてネストループ方式、もしくはその延長上のものを用いること、とあります。
図書館でアルゴリズム関係の本を見てみたのですがどこにもネストループに関して説明がなく、大変困っています。
プログラム自体は、ファイルを読み込んで、表示させるだけの簡単なものです。
簡単に抜き出すと、
for (i=0;; i++){
if ((st = read_a(fd_name, &name_buf, i)) <=0) break;
for (j = 0;; j++){
if ((st =read_a (fd_home,&home_buf ,j)) <= 0) break;
if (!strcmp(name_buf.a , home_buf.b)){
printf("%s =%s (%s)\n", name_buf.a, name_buf.c ,
home_buf.c);
}
}
if (st <0) break;
といったものです。
注意事項として、break文を入れる手法を使わないこととあります。
お願いします。ネストループって何でしょう?教えてください。
投稿日時 - 2002-02-05 17:07:06
ネストループはリレーショナルデータベースでジョインを行うアルゴリズムと
してよく知らせています。
RDBMS で使われるネストループのアルゴリズムを簡単に説明すると、ファイル
でも表でもいいんですが2つあって、次のような感じのデータが入っていたと
します。
ファイル(表)1
ID 名前
3 佐藤
1 鈴木
5 中村
2 高橋
:
ファイル(表)2
ID 住所
1 東京都
2 大阪府
3 長野県
4 神奈川県
5 北海道
:
ここから
名前 住所
佐藤 長野県
鈴木 東京都
中村 北海道
高橋 大阪府
:
という出力を得る場合に、ファイル(表)1の1行目を読み込んで ID が
同じ行をファイル(表)2の先頭行から探していき、ID が同じ行が見つ
かったら、ファイル(表)1とファイル(表)2のデータを出力し、ファイル
(表)1の次の行の ID と同じ ID を持つ行をファイル(表)2の先頭行から
再度読み込んで探し、.... という繰り返しをするアルゴリズムです。
この方法だと、ファイル(表)1の行数 * ファイル(表)2の行数回の
比較が必要であるのと、ファイル(表)2は1度読み込んだ行をもう一度
読む必要があるので非効率的です。
データがソート済みであったりするともっと効率的なソートマージという
アルゴリズムが適用できます。またハッシュを使ったりするようなアルゴリズム
もあります。
投稿日時 - 2002-02-07 01:09:26
補足
ありがとうございました。
なんとかレポートは完成しました。(^_^)/
投稿日時 - 2002-02-12 14:20:03
お礼
回答ありがとうございます。(^_^)
なるほど。IDをファイル1から一行ずつ読み込んでファイル2とあわせていけばいいのですね。
とてもわかりやすかったです@
レポートなんで、効率とかは気にしません。自信のある人はハッシュクラスタリングを実装しても良い、とか先生は言うけど自信なんてないし(・_・;)
このくらいのプログラミングならできるかな・・・?
卒業がかかっているんでホントありがたかったです。
少しいじってみます。わからなくなったらまたお願いします。
投稿日時 - 2002-02-07 13:34:41
1人が「このQ&Aが役に立った」と投票しています
OKWaveのオススメ
おすすめリンク