• ベストアンサー

SW:H16春期午前問13

解き方として、ハッシュ関数を x mod 11と仮定し、衝突が起きる組み合わせを1、12、23と考えているという箇所がテキストにあったのですが、ハッシュ関数を x mod 11に仮定した理由とそこから1、12、23をどのように導いたのか分かりません。ご理解のある方はご教授お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

11を仮定した理由は,(1)ハッシュ関数では素数による剰余計算がよく用いられるから,かつ,(2)「11で割った余り」は暗算でも計算しやすい適度な大きさ・適度な小ささだから,だと思います。 http://ja.wikipedia.org/wiki/ハッシュ関数 衝突が起きる = nで割った余りが同じ,ですから,余り1の場合と適当に想定して,11で割った余りが同じ1になる数を適当に2つ(a=12,b=1)当てはめてみたのでしょう。 × ア 12+1 が 11の倍数 ○ イ 12-1 が 11の倍数 × ウ 11が 12+1の倍数 ○ エ 11が 12-1の倍数 イ・エのどちらかに絞られました。余りが1になる別の2つの数(a=23,b=1)を当てはめてみます。 ○ イ 23-1 が 11の倍数 × エ 11が 23-1の倍数 最後まで残った正解は イ となりました。 ちなみにn=11でなくても問題は解けます。素数でなくても大丈夫です。n=100としてみましょうか(余りが0~99と分かりやすいので) ともに余りが23となる数の組を当てはめます(a=123,b=23) × ア 123+23 が 10の倍数 ○ イ 123-23 が 10の倍数 × ウ 10が 123+23の倍数 × エ 10が 123-23の倍数 正解は イ となりました。

参考URL:
http://zigen.cosmoconsulting.co.jp/index.htm#SW
ghostfish
質問者

お礼

これ以上ないほど分かりやすい説明有難うございました。

関連するQ&A

  • SW:ハッシュ法によるデータの探索に関する問題

    SW受験予定者です。 問題の解法として理解できない点がありましたので、ご理解のある方はご教授のほどお願い致します。 問.ハッシュ法によるデータの探索に関する記述のうち、最も適切なものはどれか。 答.ウ ハッシュ関数h(x)がh(x)=x mod n (xはキー、nはハッシュ表の大きさ)である場合、キー値がaであるデータと、キー値がbであるデータの間にシノニムが発生するときには、a-bがnの倍数であるという関係が成り立つ。 解答 キーaとキーbを a=s・n+c 、 b=t・n+cとする(s、t、cはともに整数) a-b=(s・n+c)-(t・n+c)=(s-t)・nとなり、これはnの倍数となっているので ウ が正解である。 以上の部分で、a=s・n+c 、 b=t・n+c をどのように導いたのかが理解できません。宜しくお願い致します。

  • なぜハッシュ関数はモジュロを使うのはふつう?

    ハッシュ関数の定義はWikipedidaによると「データが与えられた場合にそのデータを代表する数値を得る操作、または、その様な数値を得るための関数のこと」となっていますが、 色んな記事見ているとキー値(x)をデータの個数(n)で割った時の余り、 つまりx mod nみたいな計算が一般的みたいな書かれ方しているような気がします。 ハッシュ関数と言ったら上記のようなx mod nという理解でいいのでしょうか? また、なぜ冒頭で定義されたはずの関数が簡単なモジュロ計算で表されるようになってしまったのでしょうか?

  • 情報処理技術者能力認定試験

    タイトルの資格の勉強をしていたのですが ネットや参考書を見てもわからない問題があったので 質問させていただきます 次の5個のデータをハッシュ表に入れる。ハッシュ値をハッシュ関数 h(データ)=mod(データ,11)で求めるとき,等しいハッシュ値になる データはどれか。 ここで、mod(x,y)はxをyで除算した余りを表す データ 123 135 151 160 168 ア、123と151 イ、135と168 ウ、151と160 エ、160と168 できれば解説も入れてもらえると助かります

  • 微分と積分の順序交換について

    φ(x)をR上有界な一様連続関数とします。 この場合 d/dx∮(-∞~∞)φ(x)dx=∮(-∞~∞)dxd/dxφ(x)dx とφの仮定からできるということなのですが、 なぜφの仮定から微分と積分の順序交換ができるのでしょうか? テキスト等を見ましたがなかなか理解できずにいます。。。 どなたか詳しい解説をいただけないでしょうか。。

  • XSUB.h、EXTERN.h、perl.h について

    ◆状況 C言語+Perlで作られている機能を、 Perlだけのソースに移行しようとしています。 ◆困っていること 今まで、知らない言語を読む際、 ネットや本にある、関数一覧などから、 「そのプログラムで何をしようとしているか?」 を読み取れていたのですが、 C言語+Perlにおける、下記の関数??と思われるものなどについて、 全然、資料/情報が見つからず、困っています。 具体的には、 dXSARGS Perl_croak SvPV_nolen XPUSHs PUTBACK などです。 (恐らくは、EXTERN.h、perl.h、XSUB.h というヘッダファイルに定義されているのかも知れませんが。) stdio.h などにあるような、fopen関数だったり、fscanf関数などのようなものは、 いくらでもネット上/本に載っているのですが、上述のものについて、全然見つかりません、、 /***********************************/ また、includeファイルに、定数、構造体の定義、関数のプロトタイプ、マクロの定義、が記述されると認識していますが、 しかしながら、 ソース上に出てくる「Perl_croak」という箇所は、おそらく、Perl_croakという関数のように思われました。 と、すると、 includeファイルに、引数&戻り値などのインターフェース仕様だけ書かれているのではなく、 Perl_croak関数が行う、「処理の実態」も、ヘッダファイルに記述されているということでしょうか?? また、 dXSARGS という箇所については、戻り値を受け入れるような記述もなく、 dXSARGS; と一行書かれているだけなのですが、関数ではなく、戻り値を必要としないサブルーチンということでしょうか? /***********************************/ どなたか、資料/情報や、もしくは調べ方などをご存知の方がいらっしゃれば、 ご教授お願いできませんでしょうか? 些細な情報でも構いませんので、宜しくお願い致します。。

  • SW入力のプログラムについて

    SW入力のプログラムについて プログラミング初心者です。 下記のタイマー割り込みによるSW入力のプログラムで疑問ヶ所が1点あります。 添付画像の緑色のヶ所を『VolUpSw=0;』としないで、『VolUpSw=1;』としていることに何か意図があるのでしょうか? ご教授下さい。 よろしくお願い致します。 タイマー割り込み {     ・・・・     if(!(PIND&(1<<SW_PORT_VOLUP)))     {         if(++VolUpSw==0)             VolUpSw=255;         if(VolUpSw>=20)         {             Volume-=8;             if(Volume>=0xF8)                 Volume = 0x00;             VolUpSw=1; ←この部分         }         SwitchFlag|=(1<<SW_VOLUP);     }     else     {         VolUpSw=0;     }     ・・・・ }

  • (ソフ開)(平成19年秋午前問題)問9の質問

    こんにちは。 表題の問題、教えていただきたいです。 問題のテキストをコピーできないので、リンクを書きます。 http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2007h19_2/2007h19a_sw_am_qs.pdf 私の理解としては、A、B、Cの順序で入力するとしたら、Cを取り出すために、 1回でできる。Bを取り出すために、C,Bを出力するから、2回。 Aを取り出すために、C,B,Aを出力するから、3回。 ですから、全部で1+2+3=6回と思いますが、 なぜ答えが5回でしょうか。 そもそもこの問題の題意を理解を理解できていないのかな。 お分かりになる方がいらっしゃいましたら、ぜひご教授ください。 よろしくお願いいたします。

  • 導関数がさっぱり理解できません

    こんにちは。 お世話になります。 テキストに以下の様に書いて有るのですが、どうしても理解できません。 「関数f(x)=√x(ただし、x>0)とします。 この関数は、f(x)=x(※原文には、xの右上に1/2とあります)と書き直すことができるので、 導関数(=一次時導関数)f(x)は、 f(x)=1/2x((※原文には、xの右上に2/1-1とあります)=1/2x(※原文には、xの右上に-2/1とあります) となります。f(x)の2次関数f”(x)は、これをさらに微分したものですから、 f”(x)=(1/2)・(-1/2)x(※原文には、xの右上に-2/1-1とあります)=-1/4・x√x/1 となります。」 とありました。 何が何だかさっぱりわからないのですが、 特に、下記のことが分かりません。 (1)どうして、「f(x)=x(※原文には、xの右上に1/2とあります)と書き直すことができる」のしょうか? (2)どうして、「f(x)=1/2x((※原文には、xの右上に2/1-1とあります)=1/2x(※原文には、xの右上に-2/1とあります)」となるのか。なぜ、1/2が導き出されるのか分りません。 (3)どうして、「(1/2)・(-1/2)x(※原文には、xの右上に-2/1-1とあります)=-1/4・x√x/1」 となるのか。、(1/2)・(-1/2)と1/2が二度繰り返される理由、片方がマイナスになる理由、また、それが-1/4・x√x/1となるのも理解できません。 以上、さっぱり理解することができません。 どなたか、お力を貸してはいただけないでしょうか? 宜しくお願いいたします。

  • 偏導関数が分かりません

    次の関数の偏導関数fx・fyを求めなさい。 (1)f(x、y)=x^3y+y^2 (2)f(x、y)=xsin(xy) (3)f(x、y)=x^2e-y^2 私自身偏導関数をまったく理解してないので解き方も含めてご教授頂けるとありがたいです。 宜しくお願い致します。

  • 連立合同式の商の定理について

    連立合同式の商の定理について教えてください。 x,yを整数 m,aを自然数とするとき ax≡ay (mod m) ⇔ x≡y ( mod m/GCD(m,a) ) (おかしな表記ですみません。( mod -)は分数式です) が「商の定理」と習いましたが、これは連立合同式 x≡a (mod K) x≡b (mod L) x≡c (mod M) のK L M が「互いに素」ではないときに適用できる定理だと思うのですが、うまく理解できません。 解らない点:(1) 連立合同式 x≡a (mod K) x≡b (mod L) の時、K L のGCDが「1」で「互いに素」と覚えていますが x≡a (mod K) x≡b (mod L) x≡c (mod M) の時も K L MのGCDが「1」で「互いに素」、それ以上ならば「互いに素」ではないと理解してよいのでしょうか? 解らない点:(2) x≡a (mod K) x≡b (mod L) x≡c (mod M) で K L M が「互いに素」ではない場合、商の定理を適用した解法でx≡y ( mod m/GCD(m,a) )を求める方法。 K L M が「互いに素」ではない時、K L Mの最小公倍数を使えばよいのは解るのですが、GCD(m,a)の「a」が理解できません。「m」はK L Mの最小公倍数だと思うのですが、「a」は何になるのでしょう? x≡2 (mod 4) x≡4 (mod 12) x≡3 (mod 9) の場合を例として、具体的に解法を教えてください。 よろしくお願いします。もしも上式が連立合同式として成立しないのであれば、その理由も教えてください。 中国式余剰定理では、( mod ○ )が「互いに素」ではない場合にも解を求める事ができると、参考書にはあるのですが、最小公倍数を使う事しか理解できません。 具体的な解法で、よろしくお願いします。

専門家に質問してみよう