こんにちは、
二分探索の最大探索回数がlog2N+1なのは
書籍にある計算式の変換で理解できたのですが、平均探索回数がlog2Nなのが理解できません。
書籍では『平均探索回数の場合、N/2個のデータ探索をすればよいと考えます』と書かれていますが
どういう意味なのか判りません。
そこで具体的に考えてみました。
例えば8個のデータの中から探す場合、
a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]
とデータが並んでいて、
それぞれの位置に目的の値が入っていた時の探索回数は、
3回、2回、3回、1回、3回、2回、3回、4回
と考えました。
a[1]の場所に目的の数があった場合、
2回目の探索で見つかる、という意味合いです。
最大探索回数はa[7]の時に4回となり、log2N+1になっています。
この考え方でNを増やしていった所、最大探索回数はlog2N+1になりそうです。
そこで上記の場合の平均探索回数の方は、
(3+2+3+1+3+2+3+4)/8
と計算し、2.625と考えました。
この考え方でNを増やしていくと
16コ:3.375
32コ:4.21875
64コ:5.125
128コ:6.0703125
…と、
平均探索回数がlog2Nではなくlog2N-1に近づいていきます。
考え方の間違っている箇所の指摘をお願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
私は情報処理技術者試験の参考書で,二分探索の平均探索回数は(log2N ではなく)[log2N] だと勉強しました。
[ ] はガウス記号と呼ばれ,その数を越えない最大の整数を表します。また,最大探索回数はこれに1を足した値 [log2N]+1 で,どちらも整数値で求めることになります。Nが15の時は,[log2(15)] = [3.906…] なので,
平均探索3回(Miyabiさん計算 3.266),最大探索4回
Nが16の時は,[log2(16)] = [4] なので,
平均探索4回(Miyabiさん計算 3.375),最大探索5回
……となって,最大探索回数は正しく求められています。その反面,要素数が1つ増えただけで平均探索回数が一気に1回分増える境界があるわけですから,整数で求めた平均探索回数の値にはアバウトさが見られると思います。
No.4
- 回答日時:
いろいろ調べたところ、以下のようなページが見つかりました。
Average Case of Binary Search
http://www.mcs.sdsmt.edu/ecorwin/cs251/binavg/bi …
Dividing by n to get the average gives
A=k + k/n -1
Notice that for large n, this is about k–1. Thus, the average case is only about one step better than the worst case.
どうも途中でよくわからなくなってしまったのですが、
具体的な値を当てはめて考えるとかえってわかりづらくなってしまう
のかもしれません。
この回答への補足
いくつかページを紹介して下さり、ありがとうございます。
私なら検索で引っかかっても英文を見た時点で中身に目を通さなかったと思います。
翻訳した時点で、意味が判らず、
数式を見て、一旦は判った気になったけど、また判らず…。
とにかく、
高校数学で極限を求める時のように、
具体的な数値で考えずに証明した方が上手くいくかもしれない事は判りました。
捕まえれたら数学の先生に聞いてみたいと思います。
No.3
- 回答日時:
はじめにお断りしておきますが、わたしは数学に関しては不得意なほうですので、
見当はずれのことを言っている可能性があります。
正確を期すならその方面の識者にあたるなりしてください。
んで、質問者さんが実際の数値として平均回数を求めようとして
色々計算していらっしゃいますが、なんとなくですが、単純に
算術平均(相加平均)を使っては目指す数字が出ないのではないかという
気がします。
質問に対する回答(2)
http://www004.upp.so-net.ne.jp/s_honma/question/ …
面倒くさいので相乗平均使ったらどうかとかは確かめていません。
あと、ぶっちゃけ
全部を探索しつくすのに必要な回数が log2(N) + 1
なのですから、(少なくとも)半分を探索しつくすのに必要な回数
= 平均探索回数は最大探索回数のひとつ前、つまり log2(N)
になるという考え方では納得できませんか?
それに小数点以下の部分は切り上げて考えるべきことがほとんどでしょうから、
log2(N)-1 <= x <= log2(N)
の範囲になっているのならあまり気にすることもないんじゃないかと。
たとえば平均値として6.5回という数字が出たとして、0.5という数字そのものには
切り上げて全体を7にするという役目以外に意味を見出せません。
この回答への補足
相乗平均はこの場面で使うのが妥当かどうなのかも判りませんが、
平均を取る値が2つ3つではないので、具体的に試すこともできないです…。
> 全部を探索しつくすのに必要な回数が log2(N) + 1
> なのですから、(少なくとも)半分を探索しつくすのに必要な回数
> = 平均探索回数は最大探索回数のひとつ前、つまり log2(N)
本に書いてある『平均探索回数の場合、N/2個のデータ探索をすればよいと考えます』
という意味が判りました。
具体的な数値を調べる以前なら、
「最大探索回数が7回の時、7回で見つかるのが全検索結果の約半分を占めてて、1~5回で見つかる時は少ないから
平均すれば6回前後になるのかなぁ」とおぼろげに納得したのでしょうが、
具体的な数値を出したり、Nを増やすとほぼlog2N-1になるのを見てる現状では、う~ん…、といった所でしょうか。
明らかに"-1"が出てくると
- - - -
ちなみに今までの質問・補足で参考にしてる書籍は基本情報技術者の対策本、
「3週間完全マスター 基本情報技術者 2004~2005年度版」で
別の「2001年度版 基本情報技術者 標準教科書」を見た所、"比較回数"については
A:線形探索の平均比較回数 n/2
B:線形探索の最大比較回数 n
C:二分探索の平均比較回数 [log2n]
D:二分探索の最大比較回数 [log2n]+1
* [ ] はガウス記号で[ ]内の値を超えない最大の整数を表す
と書かれています。
また、要素数が10,100,1000,10000の時のそれぞれの回数も書かれていますので10000だけを挙げてみると
A:5000
B:10000
C:13
D:14
とあります。
その次の節では計算量の話が述べてあり、各探索の"計算量"では
a:線形探索の計算量 n
b:二分探索の計算量 log2n
nの個数が10000の場合は
a:13.3
b:10000
とあります。
確かに、二分探索の最大比較回数は最大で何回調べるのか、なので
7.5などと小数点が付いてはいけないから小数点以下の処理をしなければなりません。
で、この場合は小数点以下を切り捨てるのが正しいので上の[ ]の記述は正しいと思います。
では、平均比較回数の方は小数点以下を切り捨てなければいけないのでしょうか。
また、計算量の所では13.3と小数点以下を切り捨てていません。
たいていの本では線形探索の平均探索回数はN/2とありますが
別の本で、(1+n)/2となっていたのを見て、「厳密に書いてあるなぁ」と思ったのですが、
その本の二分探索の平均探索回数はlog2Nになってますね…。
No.2
- 回答日時:
そりゃためしに挙げているデータがよくないです。
例えば8個のデータの中から探す場合、
> a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]
> とデータが並んでいて、
> それぞれの位置に目的の値が入っていた時の探索回数は、
> 3回、2回、3回、1回、3回、2回、3回、4回
この場合だと、8個から15個までは最大検索回数が4回に収まりますよね。
そのなかで8個というのは最小のものですから、
> (3+2+3+1+3+2+3+4)/8
> と計算し、2.625と考えました。
としてしまうと、ひとつ下のレベルの数値、log2(N)-1に近づいていってしまうというわけです。
ためしにデータ数を15、31、63といった数字で計算してみてください。
> 書籍では『平均探索回数の場合、N/2個のデータ探索をすればよいと考えます』と書かれていますが
> どういう意味なのか判りません。
たとえば線形探索だと、
運がよければ最初の要素で当たりを引けますが、最悪だと最後の要素になります。
大体何回検索すると当たりを引けるかというのがN/2になるという理屈はいいですか(単なる算術平均です)?
二分検索の場合は、
1回で当たり→1個
2回で当たり→+ 2個
3回で当たり→+ 4個
4回で当たり→+ 8個
...
のように個数が増えますが考え方は同じで、半分調べつくすのに必要な回数を考えれば、
全体での平均の回数がわかるというわけです。
この回答への補足
> ひとつ下のレベルの数値、log2(N)-1に近づいていってしまうというわけです。
私も当初、Nを一つずつ増やして調べた値はlog2Nのグラフに対して振動しているだろうと思って細かく調べていきました。
Nが7の時は、
(3+2+3+1+3+2+3)/7 = 2.428…、と計算しました。
> ためしにデータ数を15、31、63といった数字で計算してみてください。
上のNが7個の様に調べると、(左が実際に調べてみた値/右がlogを計算した値)
15コ:3.266… / log2(15) = 3.906…
31コ:4.161… / log2(31) = 4.954…
63コ:5.095… / log2(63) = 5.977…
127コ:6.055… / log2(127) = 6.988…
255コ:7.031… / log2(255) = 7.994…
511コ:8.017… / log2(511) = 8.997…
1023コ:9.009… / log2(1023) = 9.998…
2047コ:10.005… / log2(2047) = 10.999…
と、最大探索回数が同じ中で最大のNを挙げても傾向が変わりません。
Nを2のn乗ずつではなく、一つずつ増やしていってもlog2N-1に近づいていくように見えます。
> 大体何回検索すると当たりを引けるかというのがN/2になるという理屈はいいですか(単なる算術平均です)?
線形探索の場合、最大探索回数がN、平均探索回数がN/2になるのは理解できます。
> 二分検索の場合は、
に書かれているような値を計算しています。
Nが15の時、
1回で当たりが1個
2回で当たりが2個
3回で当たりが4個
4回で当たりが8個
を( 1*1 + 2*2 + 3*4 + 4*8 )/15 = 3.266 と求めているのですが…。
- - - -
平均探索回数という意味がそれぞれの探索回数を合計し要素数で割るという受け取り方が間違っているのか、
もしくは具体的な探索方法が違ってる気がしてるのですが、どうでしょう…。
No.1
- 回答日時:
Nが十分大きければN+1→Nとみなせるので、log2(N)と言ってるのでは。
計算量を考えるときは、たいてい定数項は無視しますので。
>『平均探索回数の場合、N/2個のデータ探索をすればよいと考えます』
こっちは、ソートされてないデータについての検索の話では。
この回答への補足
引用が大きくなりますが…
『二分探索では~…
略(最大探索回数をmとすると N*(1/2)^(m-1)=1 → m=log2N+1 になる、という説明)
~…つまり、最大N個のデータを探索するのに、最大でlog2N+1回、
平均でlog2N回探索すればよいことになります(平均探索回数の場合、N/2個のデータ探索をすればよいと考えます)。
従って、二分探索の計算量はO(log2N)となります。』
とあります。
> Nが十分大きければN+1→Nとみなせるので、log2(N)と言ってるのでは。
書籍にも「O記法(オーダー記法)ではnの係数やnに加減される定数は無視」と書かれているので
最後の行の計算量がlog2Nというのは理解できます。
その一つ前の行の『平均でlog2N回』というのが腑に落ちなかったのですが、これもO記法の意味合いで書かれているのでしょうか…。
ただその後ろの括弧書きの意味が判らないのには変わりありません。
> こっちは、ソートされてないデータについての検索の話では。
文章の頭に二分探索ではとあるので、多分ソートされている前提で語られていると思うのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- 高校 1から1000の中から相手の思った数を探す場合、2分探索法を使うと何回くらいで当てられると思いますか 3 2023/05/24 10:21
- 計算機科学 判定問題がPに属するなら探索問題はNPに属する。では判定問題がNPに属するとき探索問題は? 2 2023/05/20 19:10
- 数学 特定の座標点を通る回帰を行う方法について。 2 2022/10/10 10:27
- その他(ニュース・社会制度・災害) 不明女児またまた遠くから発見か? 前回の行方不明もそうでしたが、日本での捜索はどういう感覚で 5 2022/10/04 18:55
- ヘアケア・ヘアアレンジ・ヘアスタイル 自分に合った上手な美容師さんが見付けられません 3 2022/09/08 23:31
- Excel(エクセル) Excel関数の質問です。 5 2022/04/23 12:53
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- 統計学 統計学、エクセルがわかりません!解答と詳しい解説をお願いします! (1)それぞれの地域別に記述統計量 9 2022/08/21 16:30
- その他(IT・Webサービス) ホンダ発電機EC550 オイルフィラーキャップの検索方法 1 2022/05/19 02:31
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
2分探索法の平均比較回数
情報処理技術者・Microsoft認定資格
-
2文探索法の平均回数
その他(パソコン・スマホ・電化製品)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
パースとはなんですか?
-
マクロで同じフォルダにある画...
-
比例配分と For-Next
-
VBA 円グラフ 特定条件に一致し...
-
ポケコン PC-E650 の...
-
VBAで大量データの処理
-
携帯電話を水につけるとデータ...
-
[C言語] コメント文字列を無視...
-
CGIを使用してデータの送受信、...
-
Linuxのプログラムとライブラリ...
-
ユーザーフォームのテキストボ...
-
Matlab:plotで特定の値だけをプ...
-
VBAを使ってOutlookメール本文...
-
[エクセル]データの個数が2番目...
-
UserForm1.Showでエラーになり...
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
カンマからスラッシュに
-
VBA 円グラフ 特定条件に一致し...
-
特定のデータの抽出方法を教え...
-
EXCELVBAでSQLserverからデータ...
-
CString型の文字列連結について
-
[C言語] コメント文字列を無視...
-
エクセルで2つの時系列のデー...
-
多量のSUMIF式を軽くしたい
-
この行は既に別のテーブルに属...
-
ACCESSからEXCELに出力する際、...
-
Accessで該当データにフラグを...
-
ユーザーフォームのテキストボ...
-
モジュラス103の算出方法について
-
S9タイプからXタイプにデータ...
-
ブレーカー落ちで壊れたりしな...
おすすめ情報