アプリ版:「スタンプのみでお礼する」機能のリリースについて

(1)道行く外国人に質問し、ある姓を持つ外国人を集めたいとします。
例えば「Bush」「Clinton」「Obama」(アルファベット順)のうち
どれかの姓の外国人を集めたいとき、
外国人に会うたびに「Bushさんですか」「Clintonさんですか」「Obamaさんですか」と
一人に3回の質問をする必要があります。

つまりn種の姓の人を集めたいなら、一人にn回の質問が必要だとします。

(2)しかしここで、アルファベット26種をx個のグループに等分することを考えます。
前半13、後半13とする2分割とか、
9,9,8と分ける3分割です。3分割だと3等分ではなくなりますが、
そこは適当でいいとして1~26分割ができるとします。
そして、姓の頭文字が最初のグループに入っているか? 次のグループに入っているか?
という質問も、一つと数えることにします。
この質問も、最初のグループから最後のグループへという順番で聞いていくことにします。

(2)の質問のあとに(1)の質問をすることで、質問の数をなるべく少なくすることを考えます。

初めの、n=3種の姓の人を集める例を考えると、
x=1のとき、(2)の質問は不要で、やはり一人につき3回の質問が必要になります。
x=2のとき、Bushは(2)の質問1回(「B」はアルファベットの前半なので)、
(1)の質問1回(3人のうちアルファベット順1番目なので。)で、合計2回。
Clintonは(2)が1回、(1)が2回で計3回。
Obamaは(2)が2回、(1)が1回(アルファベットの後半であると分かったので、頭文字が前半である姓について質問する必要がないから)で計3回。
一人平均2.5回の質問数になると思います。

質問数をなるべく少なくしたいときのnとxの関係はどうなるか、教えてください。

質問者からの補足コメント

  • 回答No.1の方へ。
    前半についてはその通りでした。
    計3回というのは間違いで、計2回でした。すみません。

    後半については、
    質問数の数え方は、1つの姓について聞けば1回と数えることにしてください。
    「あなたは Bush さんまたは Clinton さんですか」という質問は、
    2つの姓について聞いているのでダメというルールでお願いします。

    nとxの関係式のようなものが得られるのではないかと思うのですが。

      補足日時:2016/04/17 00:07
  • x=1のとき、誰にでも3回の質問が必要なように書きましたが、
    誰にでもではありませんでした。
    例にあてはめて考えると、ブッシュには1回の質問、クリントンには2回で終了ですね。
    そしてオバマとその他には、3回の質問が必要でした。

      補足日時:2016/04/17 00:36
  • 細かく考えて頂いて有難うございます。

    質問数についてですが、これは、道行く外国人100人に聞く場合の質問数や、
    1000人に聞く場合の質問数、をなるべく少なくしたいという条件を考えていました。
    例えば1000人に順に質問する場合、Bush と Clinton と Obamaなどという珍しい姓は
    実際はほとんどいないと思われるので、
    合計質問数は、x=1のときおそらく3000回になると思います。
    たまたまブッシュさんが一人いて2998回になるという具合だと思います。
    1000人を一堂に集めて質問するのではなく、個々に質問することにしてください。

    そうすると、合計何人に質問するのか分からなければ法則は得られないとか、
    珍しい姓を集めるのか、それともメジャーな姓を集めるのか決めなければ法則が得られないという
    ことになるかもしれません。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/04/17 06:37
  • 相手の人数や姓の珍しさは決めなくても普遍的な法則が得られるかもしれないと思っていたので
    書かなかったのですが、必要になったときのため、
    私が一番得たい(んじゃないかと思われる)条件の目安を一応書いておくと、
    外国人の人数は400人くらいで、集めたい姓はn=200種類くらい、
    全ての姓の種類は1000くらいで、姓の珍しさはどれも一様である。
    姓に使われるアルファベットも一様であることにしてください。実際はXで始まる姓は少ないだろうとかは考えなくていいとします。

    この目安に、半分~3倍くらいの幅をもたせた辺りが一番知りたい数字です。
    例えば1000人に聞きたいときもあれば、100種類の姓しか集めないこともあり、
    姓の種類は全部で2000だったりすることもあるなど。

      補足日時:2016/04/17 07:04
  • 姓の頭文字のグループは、アルファベットを等分割したグループにしてください。
    A、Bの2文字で1グループにして、C~Zをもう一つのグループとして計2グループとする、
    などは等分割ではないのでダメということにしてください。
    グループごとの文字数は可能な限り同じに近づけることにします。
    (3分割ならば9、9、8しか認めないことにします。)
    アルファベットの順番を変えて並べてから等分割する、というのも無しにしてください。
    集めたい姓の頭文字を調べて、それに合わせて都合のいいアルファベットの分割数を決めるというのも無しにしてください。
    どんな姓を集めたいかは不明で、集めるのはn種とだけ分かっている、としてください。

    No.3の回答に寄せられた補足コメントです。 補足日時:2016/04/17 07:22
  • 回答No.2に対する補足を一部忘れていたので書きます。

    >最初に「あなたの頭文字は A〜M ですか」と聞いて,
    >Yes なら「あなたの頭文字は A〜G ですか」と聞く

    これは無しにしてください。
    アルファベットの等分割は1度きりとします。
    例えばx=3分割ならばA~I(9個)とJ~R(9個)と最後(8個)のグループしかなく、
    誰に対しても「頭文字はA~Iですか」と聞き、(答えがNoなら)「J~Rですか」と聞き、終了とします。この順番で質問しなくてはならず、人によってxの値を変更してはいけないことにして下さい。
    3分割について聞いたので、次に13分割について聞く、というような
    「xを変更しての再質問」はダメとします。

      補足日時:2016/04/17 07:41

A 回答 (5件)

条件がよくわからないのでご確認したいのですが,



>Obamaは(2)が2回、(1)が1回(アルファベットの後半であると分かったので、頭文字が前半である姓について質問する必要がないから)で計3回。

「アルファベットの前半でない」とわかった時点で Bush でも Clinton でもない訳ですから,
(2) の質問 1 回目の「アルファベットの前半ですか」に「No」と答えが返ってきた時点で (1) の質問「Obama さんですか」をすればいいので,
計 2 回で済むと思うのですが, これは条件に反するのでしょうか.

さらに言えば, 例えば,

最初に「あなたは Bush さんまたは Clinton さんですか」と質問して,
Yes → 「あなたは Bush さんですか」
No → 「あなたは Obama さんですか」

と質問することにすれば,
1回目 Yes 2回目 Yes → Bush
1回目 Yes 2回目 No → Clinton
1回目 No 2回目 Yes → Obama
(1回目 No 2回目 No → それ以外)

となって, Bush にも Clinton にも Obama にも 2 回の質問で済むと思いますが, これはルール違反なのでしょうか.
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2016/04/18 02:51

>質問数の数え方は、1つの姓について聞けば1回と数えることにしてください。


わかりました.

>x=1のとき、誰にでも3回の質問が必要なように書きましたが、
>誰にでもではありませんでした。
>例にあてはめて考えると、ブッシュには1回の質問、クリントンには2回で終了ですね。
>そしてオバマとその他には、3回の質問が必要でした。

確かにそうですね.

ところで, 「質問数をなるべく少なくしたい」の「質問数」というのは
「Bush と Clinton と Obama への質問数の平均」だと思っていたのですが, (最初の本文中に「その他」の質問数に関する言及がなかったので),
もしかして「Bush と Clinton と Obama と その他 (を1人としてカウントしたとき) の質問数の平均」なのでしょうか.
例えば x=1 の場合,
前者なら (1+2+3) / 3 = 2
後者なら (1+2+3+3) /4 = 2.25
という計算になりますが….

あと, しつこくて恐縮なのですが, これも念の為確認しておきたいのですが,
例えば最初に「あなたの頭文字は A〜M ですか」と聞いて, Yes なら「あなたの頭文字は A〜G ですか」と聞く, みたいなのは無しで, 質問文のようなやり方のみを考えるということでいいのですよね?
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2016/04/18 02:51

すみません, まだ確認すべきことがありました.



>3分割だと3等分ではなくなりますが、
>そこは適当でいいとして1~26分割ができるとします。

例えば, Bush と Clinton と Obama と Roosevelt の 4 つの姓が 対象だった場合, x=2 として, 頭文字が

A〜B と C〜Z に分ける (Bush だけ先のグループ, 残りは後のグループ)
A〜C と D〜Z に分ける (Bush と Clinton だけ先のグループ, 残りは後のグループ)
A〜Oと P〜Z に分ける (Roosevelt だけ後のグループ)

というように色々な分割があって, 分割のしかたによって質問回数も違ってきますが,
どの分割をするかは自由ということでいいのでしょうか.

#そういう前提で, プログラムを組みながらちょっと考えていますが, たぶん x と n の綺麗な関係式を得るのは難しいと思います.
#x が 2 以上のときは, 上記のように, グループの分割のやり方がいろいろあるというのが, この問題を難しくしています.
#返答を頂き次第, n=2〜10 あたりに対しプログラムを組んで計算した x の値をここに貼ります.
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2016/04/18 02:51

わかりました. では, とりあえず



・姓 1, 姓 2,..., 姓 n の n 種類の姓を集める (n≒200)
・姓の個数は全部で N 個 (N≒1000)
・姓を x 個に等分割

ということで考えていきましょう.
(質問する外国人の人数は 400 人程度とのことですが, これは答えを出す上では関係ありませんね. 要は 1 人に質問したときの質問回数の期待値だけが問題なので.)

姓の珍しさは一様 (すべての姓が 1/N の確率であらわれる) とし,
姓に使われるアルファベットも一様ということで,
x 個に分割したときにどのグループにも N/x 個の姓が属すると仮定してしまいましょう.
また, 集めたい 1,2,...,n の n 種の姓についてもアルファベットの偏りはなく,
x 個に分割したときにどのグループにも n/x 個の姓が属すると仮定しましょう.
(本当は, N/x や n/x が割り切れない場合多少のズレが生じますが, とりあえず割り切れると仮定してしまいましょう.
更には, 26/x が割り切れなかったらアルファベットでは x 個に等分割できないといった問題もありますが,
アルファベットとかそういうことは考えないで, とにかく N 個の姓を x 個のグループに等分割した, このとき集めたい n 個の姓も等分割された,
ということにしておきます.)
なにか仮定に不都合な箇所があれば, ご指摘ください.

このとき, 質問 (2) に要する回数は, x 等分したときのグループを順にグループ 1, グループ 2, ..., グループ x とすれば

グループ 1 に属する人に 1 回
グループ 2 に属する人に 2 回

グループ x-1 に属する人に x-1 回
グループ x に属する人に x-1 回 (今までの質問すべてに No だった時点でグループ x に属するとわかる)

ですから,
平均で (1+2+…+(x-1)+(x-1))/x = (x(x+1)/2-1)/x = (x+1)/2 - 1/x
回の質問をすることになります.

次に質問 (1) ですね.
質問している対象の人がどこのグループに属していようと, 質問する平均回数は変わりませんから,
グループ 1 に属しているものとしてしまいましょう. すると,

姓 1 の人には 1 回
姓 2 の人には 2 回

姓 n/x の人には n/x 回
その他の姓 (姓 1,…, 姓 n のいずれでもない姓) の人には n/x 回

ということになります.
すると, 姓 1,…, 姓 n の人たちには平均で (1+2+…+n/x)/(n/x) = (n/x + 1)/2 回の質問をすることになります.
その他の姓の人には n/x 回の質問をすることになります.
仮定から, 集めたい姓とその他の姓の人の割合は n:(N-n) ですから,
全体としては平均で ((n/x + 1)/2 * n + n/x * (N-n)) / N = n^2/2Nx + n/2N + n/x - n^2/Nx = n/2N + n/x - n^2/2Nx 回の質問をすることになります.
(面倒なので括弧を省きましたが, 例えば n^2/2Nx という分数は 2Nx までが分母だと思って読んでください.)

結局,
質問 (2) には (x+1)/2 - 1/x 回
質問 (1) には n/2N + n/x - n^2/2Nx 回の質問をすることになるので, 合計で

(x+1)/2 - 1/x + n/2N + n/x - n^2/2Nx
= x/2 + (n(1-n/2N)-1)/x + 1/2 + n/2N

回の質問をすることになります.
これを最小にするには, x/2 + (n(1-n/2N)-1)/x を最小にすればよいです.
n≧3 とすれば, (n(1-n/2N)-1)/x は正なので相加相乗平均の不等式が使えて,
x/2 + (n(1-n/2N)-1)/x ≦ 2√((n(1-n/2N)-1)/2)
であり, 等号は x/2 = (n(1-n/2N)-1)/x のときに成立します.
したがって x = √(2n - n^2/N - 2) が得られました. (正確には整数とは限らないので切り上げ or 切り下げをする必要がありますが.)

途中に計算ミスなどがないか不安ですが, 一応 x が n と N を用いた式で表せました.
(n が N に比べ十分に大きいなら, x≒√(2n) ということになりますね.)

実際に n=200, N=1000 で計算してみますと,
x = √(2*200 - 200^2/1000 - 2) = √358 ≒ 19
ですね.
この場合なら, n/x や N/x が割り切れないとはいえ, n や N が x に比べて割りと大きいので,
最初の「n/x や N/x は割り切れるとする」といった仮定による誤差は, おそらく大して問題にはならないと思われます.
    • good
    • 0
この回答へのお礼

こんないい感じの式が得られるとは思いませんでした。使わせて頂きます。
丁寧に解説してくださってありがとうございました。
しかし自分では経験をよほど積まないと答えは出せないだろうなと思いました。
経験はどうしても必要ですね。

お礼日時:2016/04/18 02:48

補足:


集めたい姓の人は姓全体からするとかなり少ないとした上で, かなり大雑把に見積もるのなら

・質問 (2) は x グループに分けて質問するので, 平均的にはだいたい x/2 回の質問をする
・質問 (1) は (集めたくない姓の人に) n/x 回の質問をする

ので, 大体 x/2 + n/x 回の質問をすることになる. これは相加相乗平均の不等式により x=√(2n) で最小になる…とやれば十分ですね.
    • good
    • 0
この回答へのお礼

本物の姓なら何十万もありそうなのでこの式で考えると楽ですね。
8種類の姓を集めたいときはアルファベット4等分グループを作るのがいいんですね。
338種類以上の姓を集めるなら、アルファベットは26等分がいい
等、考えると面白いですね。

お礼日時:2016/04/18 03:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!