サーチのパワーポイント資料

Download Report

Transcript サーチのパワーポイント資料

探索についての復習
・逐次探索法
番兵を用いない場合
番兵を用いる場合
・2分探索法
プログラムはホームページに
記載されているものに従うこととする。
逐次探索法
Key:
・初期データ
a[]
は,チーム名と去年の順位
keyにkintetsuが入力されたとき,
Kintetsu
i= 012
0
a[]
Ham
1
4
Kintetsu
2
3
6
Kintetsu 2
Seibu 1
Kintetsu
Kintetsu
Orix
一致しない
一致した!
―>
4
Lotte 5
5
Daiei 3
i++
探索終了
( i<Nを常にチェック )
i=2のときに終了したので2番目の
レコードの名前(a[2].name)を表示
逐次探索法
Key:
a[]
は,チーム名と去年の順位
keyにkintetsuが入力されたとき,
Kintetsu
char key[20];
printf("Search Data ? "); scanf("%s",key);
i= 012
0
a[]
・初期データ
Ham
1
4
Orix
6
2
3
Kintetsu 2
Seibu 1
4
Lotte 5
5
Daiei 3
while(i<N && strcmp(key,a[i].name)!=0)
Kintetsu
Kintetsu
一致しない
一致した!
Kintetsu
―>
i++
探索終了
( i<Nを常にチェック )
printf("%s %d",a[i].name,a[i].order);
i=2のときに終了したので2番目の
レコードの名前(a[2].name)を表示
逐次探索法(番兵) ・初期データ
Key:
a[]
は,チーム名と去年の順位
keyにkintetsuが入力されたとき,
Kintetsu
i= 012
0
a[]
Ham
1
4
Orix
6
2
3
Kintetsu 2
Seibu 1
4
Lotte 5
5
Daiei 3
6
Kintetsu
終了判定の
見張り役
Kintetsu
Kintetsu
一致しない
一致した!
Kintetsu
―>
i++
探索終了
( i<Nは確認しない )
i=2のときに終了したので2番目の
レコードの名前(a[2].name)を表示
逐次探索法(番兵) ・初期データ
Key:
は,チーム名と去年の順位
keyにkintetsuが入力されたとき,
Kintetsu
char key[20];
printf("Search Data ? "); scanf("%s",key);
i= 012
0
a[]
a[]
Ham
1
4
Orix
6
2
3
4
Kintetsu 2
Seibu 1
Lotte 5
a[N].name=key;
5
Daiei 3
while(strcmp(key,a[i].name)!=0)
Kintetsu
Kintetsu
一致しない
一致した!
6
Kintetsu
終了判定の
見張り役
Kintetsu
―>
i++
探索終了
( i<Nは確認しない )
printf("%s %d",a[i].name,a[i].order);
i=2のときに終了したので2番目の
レコードの名前(a[2].name)を表示
初期データ a[]: 東海地区のテレビチャンネル
2分探索法
Key:31
low
a[]
low
low
high
high
0
1
2
3
4
5
6
7
8
9
flag
1
3
5
9
11
25
31
33
35
37
01
mid=(low+high)/2=(5+9)/2=14/2=7
mid=(low+high)/2=(5+6)/2=11/2=5
mid=(low+high)/2=(0+9)/2=9/2=4
mid=(low+high)/2=(6+6)/2=12/2=6
a[mid]=a[7]=33>
a[mid]=a[5]=25<
key=31
a[mid]=a[4]=11<
key=31
a[mid]=a[6]=31=key=31
low=mid+1=6
high=mid-1=6
low=mid+1=5
一致したのでFlagを1にして終了