今日はゲームについてではなく課題について質問させていただきます
現在,各文字列探査法の速度を様々な場合について調べ,考察しないといけないのですが
簡略BM法の部分にて発生する文字の種類を4種類程度にした場合
作成したスキップテーブルの値をパターンのカーソルに足すと元の場所に戻り(?)
while文内を無限ループしてしまう状態です
どのようにすれば回避できるでしょうか
分かりにくい説明で申し訳ないです
どなたか助言お願いします
簡略BM法について
Re:簡略BM法について
ptの位置をループの外で保存しておいたらいいのでは
int ExecutionBoyerMooreInquiry( const char txt[/url], const char pat[/url] ){ int pt,pt2; //txtをなぞるカーソル int pp; //patをなぞるカーソル int txt_len = strlen( txt ); //txtの文字数 int pat_len = strlen( pat ); //patの文字数 int skip[ UCHAR_MAX + 1 ]; //スキップテーブル for( pt = 0; pt <= UCHAR_MAX; pt++ ) skip[ pt ] = pat_len; for( pt = 0; pt < pat_len - 1; pt++ ) skip[ pat[ pt ] ] = pat_len - pt - 1; while( pt < txt_len ) { pp = pat_len - 1; pt2 = pt; while( txt[ pt2 ] == pat[ pp ] ) { if( pp == 0 ) return ( pt2 ); pp--; pt2--; } pt += skip[ txt[ pt2 ] ]; } return ( -1 ); }
Re:簡略BM法について
>boxさん
添付していることを明記してませんでした
申し訳ないです
実際必要な部分は少しなのでそのままこちらに書いたほうが良かったですね…
>toyoさん
家の環境だとsys/time.hなどがインクルードできないため実行できないので確認できませんが
明日にでも自分の思いついた方法ともども試してみます
今日からテストも始まりさらにレポートも溜まってるという…w
今年,もといこの夏を乗り切れるかどうか怪しいです
添付していることを明記してませんでした
申し訳ないです
実際必要な部分は少しなのでそのままこちらに書いたほうが良かったですね…
>toyoさん
家の環境だとsys/time.hなどがインクルードできないため実行できないので確認できませんが
明日にでも自分の思いついた方法ともども試してみます
今日からテストも始まりさらにレポートも溜まってるという…w
今年,もといこの夏を乗り切れるかどうか怪しいです
Re:簡略BM法について
toyoさんの方法を試してみたところ見事解決しました
この度はどうもありがとうございました
またテストが終わったら今度はゲームについてでも質問させてもらおうと思います
この度はどうもありがとうございました
またテストが終わったら今度はゲームについてでも質問させてもらおうと思います