A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> 1点目:既に世に出回っているアルゴリズムかご教授願えれば幸いです。
「文字列探索」で検索すれば、沢山見つかるし、
ウィキペディアにも複数載ってるし
http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97% …
↑にある「外部リンク」にはJavaのサンプル付きで更に多くのアルゴリズムが紹介されている。
http://www-igm.univ-mlv.fr/~lecroq/string/
これくらいのことだったら、まずは人に聞く前に自分で調べましょうよ。
> 2点目:改良の余地やバグ等ございましたらご指摘いただければ幸いです。
ソースをざっと眺めただけでは、何をしようとしているかわかりませんでした。詳しく解析するつもりになれません。
どんなところが既存の方法より優れているか、説明できますか?
mallocがやたらとあって、ポインタのポインタのポインタなんてものがあって....
と、下手すれば単純な探索より時間がかかりそうな気さえします。
この回答への補足
さて、基本的な部分の説明をさせて頂きましたが、もう少し踏み込んだ説明をさせていただきます。縦軸の一文字分のデータの作成方法ですが、16で割った値と16で割った余りの値をそれぞれ用意します。少し説明が難しいのですが、多重ポインタの要素数16(一番右端)のポインタ配列部分に割った値と余りの値をそれぞれ格納します。これにより16×16=256(0xFF)のデータが作成されます。つまり一文字分のデータです。
ここで、2次元配列を思い描いてもらいたいのですが、 int bit[a][b]はa行b列の配列となります。これが3次元になっても4次元になっても列は必ず存在します。つまり一番右端の配列です。
先ほどのポインタ配列に話を戻しますが、一文字分のデータは一番右端のポインタ配列に格納されています。先ほど演算した値は、ポインタ配列の0~15のうちどこかに必ず格納されます。説明をさらに進めます。ソースを確認してもらえれば有難いのですが、bit[0][i][s->indexbit][spot[0]]|=bitcalとbit[1][i][s->indexbit][spot[1]]|=bitcalが記述されていると思いますが、この一番左端のポインタ配列の[0]と[1]に着目します。これが縦軸のビット列を表す重要な部分になります。省略して記述しますが、bit[0][][][spot[0]]が16で割った値の多重ポインタ配列、bit[1][][][spot[1]]が16で割った余りの値の多重ポインタ配列を表します。
つまり、一文字を縦軸のビット列に分解することにより横軸のビット列1ビット分で一文字を表現できるようにしたのです。
説明が長くなりましたので、ここで一旦切り上げさせていただきます。残りはまた次回説明させていただきたいと思います。長文大変失礼いたしました。
早速のご回答ありがとうございます。こんなに早く回答を頂けるとはうれしい限りです。
自分で調べるという点につきましては、危言のお言葉有難く拝読させていただきました。
拙い文章ではございますが、ソースについて説明させていただきます。
まず、mallocやポインタのポインタを多用した件につきましては、ヒープ領域の確保という点からでございます。
次に、このアルゴリズムの特徴として申し上げたいのはint型32ビットのビット列を出来る限り有効利用したいという考えに基づいたものです。その為のアイディアとして、多重層のビット平面という考えに至りました。
この多重層のビット平面を簡単に説明いたします。通常ビット列は、インターネットや書籍などの説明にありますように横一直線に型宣言文だけビット長が図に示されているものを良く見かけます。
このビット列を縦にも拡張したらどうなるかと思い多重ポインタを利用し縦×横の平面を作成いたしました。つまり、縦軸が一文字分のデータ、横軸が文字数というものです。当然int型なので32ビット、つまり32文字しか扱えません、そこで多重層という考え方を取り入れ32文字以上の文字列も扱えるようにいたしました。
分かりにくい説明で誠に恐縮ではございますが、基本的な部分の説明とさせていただきます。長文大変失礼いたしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- AI・ロボット ChatGPTの文章作成アルゴリズムは、噂によると、ある単語や接続詞などがきたらその次に繋がる確率が 3 2023/06/05 21:19
- 数学 M種類の部品からN種類の部品を抽出する効率的なアルゴリズム 2 2022/04/22 16:51
- C言語・C++・C# 必ずyou bet と表示されます 2 2023/07/28 22:19
- Visual Basic(VBA) 指定した文字から指定した文字のスペースまでを削除するVBAの構文について 6 2022/07/24 22:20
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
Stuck
-
Dijkstraて
-
期間重複チェックがわかりません
-
ハノイの塔のさいきアルゴリズ...
-
BCDについて
-
フリーセルの難易度について
-
グループを均等に分けるには?...
-
Fotranで最小公倍数
-
アルゴリズムとプロトコールの違い
-
GDLでH8/3052Fのi2cプログラム...
-
アプリのプログラムを見るには...
-
Javaでのある数の小数点乗に...
-
パックマンプログラム
-
あるプログラムのコマンドライ...
-
プログラムの勉強のおすすめは
-
Notepad++の関数リスト表示でC...
-
65536は2の何乗なのでしょうか?
-
EXCELなどで「返す」という表現
-
自作のプログラムがウイルスと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
Dijkstraて
-
Stuck
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
アルゴリズムとプロトコールの違い
-
期間重複チェックがわかりません
-
グループを均等に分けるには?...
-
三次元形状曲面の導出法
-
あいまい検索(文字列一致率)
-
Visual studio2019 C#で生まれ...
-
gooという検索エンジンの後にGo...
-
フリーセルの難易度について
-
C♯で電卓を作成しています。演...
-
CRC-CCITT16の算出法
-
経路探索について
-
OpenCVのライセンスについて
-
理系の高校生です。大学で情報...
-
偏りのある乱数のアルゴリズム
-
詰め将棋をとくのは、アルゴリ...
おすすめ情報