- ベストアンサー
c言語でハッシュを作るらしいのですが...
c言語でハッシュを作るんですが、勉強不足のためいまいち理解が追いついていないのが現状です。昔の字体を、今の字体に変換するために下記の記述のあるファイル読み込むんですが、この2,3列目が昔の字体で、この文字があったら1列目の今の字体へのポインタを返すように配列に入れたいんです。誰かやり方をおしえてくれませんか?、 没,沒,歿 壱,壹,弌 奇,竒,綺 協,恊,叶
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
どうもよくわかりません。この場合にハッシュを使うなら、 1.旧字体の文字コードより、ハッシュキーを作成 2.ハッシュキーより、検索用テーブルを選択 3.検索用テーブルを使って実際の検索 という流れになると思うのですが、わからないのはどのあたりなのでしょうか?
その他の回答 (4)
- titokani
- ベストアンサー率19% (341/1726)
>ハッシュはこんな感じで作ろうというイメージはあるのですが、具体的にプログラムをどうすれば、ハッシュを作れるかをまだつかめていないのです だから、まずはハッシュキーを作ります。 ハッシュキーというのは、単に検索テーブルを選択するだけの値ですから、0~(検索テーブル数-1)の値をとります。 なので、検索テーブルを256個にするなら、それこそ、文字コードの下位1バイトでも十分です。
補足
すいません。まだ、よく意味がわかりません。調べてみます。
- titokani
- ベストアンサー率19% (341/1726)
>最初の1番からです。ハッシュの作成がよくわからないんです。 それは、 >ハッシュの作り方としては、旧字体を文字コードにして数字とみなし、その数字を最大値よりも大きい素数で割ってその数字でハッシュを作ろうと考えています。 と、書かれていましたので、わかってらっしゃるのかなと思ったのですが。どこがわからないのでしょうか?
補足
>ハッシュの作り方としては、旧字体を文字コードにして数字とみなし、その数字を最大値よりも大きい素数で割ってその数字でハッシュを作ろうと考えています。 ハッシュはこんな感じで作ろうというイメージはあるのですが、具体的にプログラムをどうすれば、ハッシュを作れるかをまだつかめていないのです。
- titokani
- ベストアンサー率19% (341/1726)
>旧字体から新字体へぶつけ方は旧字体を一列の配列にいれ、検索する字体を、旧字体を入れた配列に全件検索して見つけていく感じです。 ハッシュというのは、つまり、その検索用の配列が非常に大きくなった場合に、配列を分割するための手法です。1Mバイトの検索用配列も256個に分割すれば、一つ一つは256Kバイトから検索すればいいので、高速化になります。 そして、この分割方法(=ハッシュキーの作り方)次第でどの程度高速化されるのかが違ってきますので、このあたりが工夫のしどころだったりします。
補足
ハッシュの作り方としては、旧字体を文字コードにして数字とみなし、その数字を最大値よりも大きい素数で割ってその数字でハッシュを作ろうと考えています。 ハッシュのバイト数を指定してchar型のポインタとint型で作ろうとしています。
- titokani
- ベストアンサー率19% (341/1726)
なにがわからないのでしょうか? 1.ファイルの読み方 2.旧字体から新字体の検索のしかた 3.ハッシュの作り方 「全部わからない」というなら、上から順番に。ハッシュというのは、高速化すための手法なので、とりあえずはあとまわしにしても問題ありません。 ファイルがUNICODEなのかSJISなのかも非常に重要な点ですので、押さえておきましょう。
補足
コードはutf=-8です。ハッシュというものが検索に向いているという大まかな知識しか知らず、しっかりとどういう挙動をするのかは、捕らえていないです。 旧字体から新字体へぶつけ方は旧字体を一列の配列にいれ、検索する字体を、旧字体を入れた配列に全件検索して見つけていく感じです。
補足
最初の1番からです。ハッシュの作成がよくわからないんです。