ガラス玉の仕事は䞀般的な堎合の解決策です

手のひらにボヌル 100階建おの建物ず2぀のガラス玉のタスクは、むンタヌネットコミュニティに長い間悩たされおきたした Habrahabr 、 LJ 、 フォヌラム 。 奜奇心mind盛な心は確かに自分自身に問いかけたす。䞀般的な堎合、床がn 個、ボヌルがk個あるずき䜕をすべきか



n = 2 40 、 k = 10の堎合に少なくずもおよそ䜕回のスロヌが必芁になるずしたしょうか



ネットワヌクの広倧さず私自身の研究で芋぀かった情報を組み合わせるこずで、この問題を解決するための重芁なアむデア、および研究䞭に埗られた䞻な結果ず興味深い芳察に぀いおの投皿を提瀺したいず思いたす。



そのため、 条件を述べたす。k個の同䞀のガラス玉がありたす。 「 n 」階の「 x 」階以䞊の階から萜ちた堎合、「 x -1」階から䞋の階たで萜ちた堎合、それらは壊れたせん。 xの倀は䞍明であり、1からnたでの任意の自然数にするこずができたす。 必須です

1. xを芋぀けるこずが保蚌されおいる最小詊行回数ボヌルスロヌを決定したす最悪の堎合、その倀に関係なく。

2.䞊蚘のテスト数以䞋でxを芋぀けるこずが保蚌されおいるアルゎリズムを開発したす。



最小テスト数の抂算



2぀の極端なケヌスを区別するのは簡単です

A ボヌルは1぀しかありたせん 。 次に、各フロアから、最初のフロアから順番に、分割されるか「 n -1」フロアに到達するたで、順番にスロヌする必芁がありたす。 ボヌルが「 a 」フロア1≀a≀n-1でクラッシュした堎合、 x = aです。 「 n -1」番目に分割されなかった堎合、 x = n 。 最悪の堎合、 n -1のテストが必芁になりたす。

B 倚くのボヌルがある ぀たり、k≥log 2 n 。 その埌、あなたは適甚するこずができたす
怜玢方法「セグメントを半分に分割する」
家の䞭倮からボヌルを​​投げたす番号 n /2⌉の床から。where n /2⌉はn / 2以䞊の最小敎数です。 クラッシュしない堎合は、建物の䞊半分の䞭倮から投げたす。クラッシュする堎合は、建物の䞋半分の䞭倮から2番目のボヌルを投げたす。以降、同様に、建物の察応するセクションを半分に「分割」したす。
最悪の堎合、⌈log2 n⌉のトラむアルず同じ数のボヌルが必芁になりたす突然投げるたびに壊れたす。



したがっお、 テストの最小数は ⌈log2 n⌉〜n-1 の範囲にありたす 。 この数倀を関数f  n 、 k で瀺したす。



たずえば、平屋ずk個のボヌルの堎合、⌈log2100⌉= 7、100-1 = 99、7≀f100、 k ≀99です。䞀般的に、 f  n 、 k の倀は、 k 。 したがっお、 f 100、1= 99、 f 100、2= 14

f 100、3= 9、 f 100、4= 8、 f 100、5= f 100、6= f 100、7= ... = 7。



驚くべき事実1階建おの建物の堎合、 わずか5぀のボヌルで7回の詊行でxを芋぀けるこずができたす ぀たり、「セグメントを半分に分割する」こずによる怜玢方法は䞇胜薬ではありたせん-それは高速ですが、必芁なボヌル数に関しお垞に最適ずは限りたせん。



テストの最小数を蚈算するための繰り返し匏



それでは、どのようにしおf  n 、 k の正確な倀を芋぀けるのでしょうか

最も単玔な状況では、すべおが明確です f  n 、1= n -1ケヌスAを参照、 f  n 、 k =⌈log2 n⌉for k≥log 2 n ケヌスBを参照数倀f 1、 k = 0フロアが1぀しかない堎合は、問題の状態に応じお望たしいフロアにもなりたす。



n≥2およびk≥2の堎合を考えおみたしょう。最初のテストで「 a 」フロアからボヌルを​​投げた堎合、 aは1〜n -1の範囲であるずしたす「 n 」フロアからボヌルを​​投げおも意味がありたせん。 次の2぀の結果が考えられたす。

出゚ゞプト蚘1ボヌルがクラッシュしたした。 ぀たり、1≀x≀aです。 未探玢の床、 k -1個のボヌル、぀たり xの怜出を保蚌するには、もう1぀のf  a 、 k -1テストが必芁です。

出゚ゞプト蚘2ボヌルはクラッシュしたせんでした。 これは、 a + 1≀x≀nを意味したす。 n個 の未探玢の床、 k個のボヌル、぀たり xを芋぀けるこずが保蚌されるためには、もう1぀のf  n - a 、 k テストが必芁です。

その結果、「 a 」階からボヌルを​​投げた埌、 xが芋぀かるこずを保蚌するために別のmax { f  a 、 k -1、 f  n - a 、 k }テストが必芁になる堎合がありたす。

テストの数を最小限にしたいので、max { f  a 、 k -1、 f  n - a 、 k }が最小、぀たりmin a {max { f  a 、 k -1 、 f  n - a 、 k }}。



したがっお、 テストの最小数は次のずおりです 。

f  n 、 k = 1 + min a {max { f  a 、 k -1、 f  n - a 、 k }}匏1。



この匏は、任意のnおよびkの f  n 、 k 、およびボヌルを投げたい階数a  n 、 k = aを蚈算するのに十分です-倀がmax { f  a 、 k -1、 f  n - a 、 k }は最小倀に達したす。

蚈算は、たずえばExcelで簡単に実装できたす 。

誰が気にする






2列目から始たる列Aに、 nの倀を1から必芁な倀の順に曞き蟌みたす。 列Bの察応する行に、 f  n 、1の倀、列Cにf  n 、2の倀などを曞き蟌みたす。右に1列シフトするず、ボヌルの数が1぀増えたす。

n = 1の堎合、関数f  n 、 k の倀はれロであるため、察応する行をれロで埋めたす。

セルB3に、 f = n 、1= n -1であるため、匏= A 3-1を蚘述したす。目的の行数たでコピヌたたはストレッチしたす。

セルC3に次の匏を蚘述したす。

= 1 + MINIFB $ 2B2> BIGGESTC $ 2C2; $ A $ 2$ A2; B $ 2B2; BIGGESTC $ 2C2; $ A $ 2$ A2

CTRL + SHIFT + ENTERを抌したす 配列数匏を入力したす。 コピヌたたはストレッチしお、必芁な行数だけ䞋に、列を右に移動したす。



a  n 、 k の倀は、同じ原理に埓っおf  n 、 k の蚈算に䜿甚される列の右偎の列で蚈算されたす行はnの倀に察応し、1列右ぞのシフトはボヌルの数が1぀増えるこずを意味したす。

スクリヌンショットのような状況では、 a  n 、1= 1であるため、3行目から始たる列Hに単䜍が入力されたすケヌスAを参照しお、垞に1階からのみボヌルを投げたす。

セルI3に次の匏を蚘述したす。

= MAXB $ 2B2 <C3*BIGGESTC $ 2C2; $ A $ 2$ A2<C3* $ A $ 2$ A2

CTRL + SHIFT + ENTERを抌したす 配列数匏を入力したす。 コピヌたたはストレッチしお、必芁な行数だけ䞋に、列を右に移動したす。


X怜玢アルゎリズム



a  n 、 k の倀がわかっおいる堎合、 f  n 、 k 以䞋のテストで怜玢アルゎリズムxを蚘述するのは簡単です。

入り口 nは家の床の数、 kはボヌルの数です。

出力 x-目的のフロアの番号。

アルゎリズムの始たり。

ステップ1.倉数を初期化したす。x = 1.ステップ2に進みたす。

ステップ2.停止条件 n = 1の堎合、 xおよびSTOPを出力し、そうでない堎合はステップ3に進みたす。

ステップ3.番号x -1 + a  n 、 k の床からボヌルを​​投げたす。 ボヌルがクラッシュした堎合、倉数の倀を曎新したす n = a  n 、 k 、 k = k -1。

ボヌルがクラッシュしない堎合は、倉数の倀を曎新したす x = x + a  n 、 k 、 n = n - a  n 、 k 。 ステップ2に進みたす。

アルゎリズムの終わり。



100フロアず5぀のボヌルがある堎合、7回の詊行でxを芋぀ける方法の䟋を芋おみたしょう。 Excelで構築されたテヌブルのa  n 、 k の倀を䜿甚しお、ボヌルを投げるフロアの番号を曞き蟌みたす 。

垞に壊れおいる堎合

57- > 26- > 11- > 4- > 1 壊れおいない堎合-> 2 壊れおいない堎合-> 3

たずえば、26階からボヌルを​​投げた埌、クラッシュしなかった堎合、 n = 31、 k = 4の状況にいるこずがわかりたす。その埌、スロヌのシヌケンスは次のようになりたす。

57- > 26- > 26 + 15 = 41- > 26 + 7 = 33- > 26 + 3 = 29- > 26 + 1 = 27 壊れおいない堎合-> 27 + 1 = 28 。



すべおの可胜なオプションを怜蚎する぀もりはありたせん。 「セグメントを半分に分割する」ずいう点で、アルゎリズムが怜玢方法ず異なるこずがわかりたす。



テストの最小数を蚈算するための「明瀺的な」匏



フォヌミュラ1の䞻な欠点は、蚈算に非垞に倚くのリ゜ヌスがかかるこずです。 関数倀のテヌブルのパタヌンを怜玢しお実蚌するこずにより、 k = 2およびk = 3に぀いおのみ、この繰り返し匏を自分で明瀺的に解決できたした。 特に、最初の堎合、結果は次のようになりたす。

f  n 、2=⌈ 画像 ⌉。



他の考慮事項からも同様の結果が埗られたした 蚘事 著者-Stebanoid 。 真実は圌女の答えです 画像 、これは問題のわずかに異なる条件によっお匕き起こされたす-最䞊階から投げるずきにボヌルが壊れる必芁はありたせん。 この可胜性を考慮したい堎合、答えでは、 nの代わりに匏n + 1を眮き換える぀たり、䞋限を远加する必芁があり、蚘事から匏を取埗したす。



しかし、䞀般匏が芋぀からなかったため、再垰関係が耇雑すぎるため、埐々に停止したした。 irishoak 、 Bert 、 mikhail_vsなどのナヌザヌから、 f  n 、 k の蚈算を枛らしお興味深い䞍平等を解決できる玠晎らしいアむデアを発芋したのは、この瞬間でした。



これを行うには、別の関数を怜蚎する必芁がありたす g  m 、 k はフロアの最倧数であり、その䞭でk個のボヌルが存圚するm回のテストでxを確実に芋぀けるこずができたす。

最も単玔な状況では、この関数は次の倀を取りたす g  m 、1= m + 1ケヌスAを参照、 g  m 、 k = g  m 、 m for k > m  m詊行は分解できるため最倧m個のボヌル、残りのk - m個のボヌルは䞍芁であり、関数の倀には圱響したせん。

m≥2、 k≥2の堎合、繰り返しの匏を導出できたす。

g  m 、 k = g  m -1、 k -1+ g  m -1、 k 匏2

次の理由から簡単に理解できたす。
「 a 」の床からボヌルを​​投げお壊れた堎合、 m -1回の詊行ずk -1のボヌルを䜿甚しお、 1〜aの範囲でxを芋぀けたす。 このためには、 aは次の条件を満たす必芁がありたすa≀g m -1、

k -1。 したがっお、ボヌルを投げるこずができる最䞊階はa = g  m -1、 k -1です。 クラッシュしない堎合は、 m -1回の詊行ずk個のボヌルがあり、これを䜿甚しお別のg  m -1、 k フロアを探玢できたす。 したがっお、可胜な限り合蚈g  m -1、 k -1+ g  m -1、 k フロアを探玢できたす。


匏1ずは察照的に、匏2の繰り返しは簡単に解決できたす。 明瀺的な圢匏でg  m 、 k を衚珟したす。

g  m 、 k = C m 0 + C m 1 + C m 2 + ... + C m k 、

ここで、C m iはiのmの組み合わせの数です。Cm i = m / i  m - i 。

この平等性は「建蚭的に」掚定できたすが、「掚枬」しお垰玍法で蚌明するこずもできたすが、これははるかに簡単ですここでは蚌明したせん。

ここで、テストの最小数を芋぀けるために、蚈算する必芁がありたす

f  n 、 k =⌈log2 n⌉k≥log 2 nの 堎合 、

f  n 、 k = min {正の敎数m | k <log 2 nの堎合、 C m 0 + C m 1 + C m 2 + ... + C m k≥n}。

ずころで、 g  m 、 k の挞化匏を導出するずき、もう1぀の方法は、 f  n 、 k のテストでボヌルを投げおxを芋぀けるこずができるフロアの数を決定したす a  n 、 k = g  m -1、 k -1、

ここで、 m = f  n 、 k 、぀たり

a  n 、 k = C f  n 、 k -1 0 + C f  n 、 k -1 1 + C f  n 、 k -1 2 + ... + C f  n 、 k - k < f  n 、 k の堎合は1 k -1 匏3、

a  n 、 k = 2 f  n 、 k  -k≥f n 、 k の堎合は1 匏4。



結論ず最小数の詊隓の冒険的評䟡



タスクに着くず、私は盎感的に゜リュヌションプランを抂説したした。最初に正しいフロアを芋぀ける぀たりアルゎリズムを開発する原理を理解し、次に最悪の堎合に必芁なスロヌの数を芋぀けたす。

驚いたこずに、パスは異なるこずが刀明したした。f  n 、 k で指定したテストの最小数を蚈算するための匏から簡単なアルゎリズムを簡単にたどるこずができたした。



関数fに぀いおほずんど䜕も知らないので、次のように抂算したした。

log 2 n≀f n 、 k ≀n-1



「倧きい」 kの堎合、぀たりk≥log 2 nの堎合は明らかに巊の境界に到達し、 k = 1の堎合は右の境界に到達するこずがわかりたす。kの䞭間倀の堎合、怜玢f  n 、 k 䞍等匏を満たす最小の正の敎数m  m 0で衚す

C m 0 + C m 1 + C m 2 + ... + C m k≥n䞍等匏1。

ただし、 f  n 、 k の真に明瀺的な匏を取埗するためにそれを解くこずは、簡単な䜜業ではないようです。 あなたの提案を聞くのは面癜いでしょう。



ただし、䞍等匏が解決されない堎合でも、目的のm 0が䜍眮する範囲を掚定できたす。これは、関数f  n 、 k の倀でもありたす。



䞀般的に、提瀺された二項係数の和は、倉数mの次数kの倚項匏ず芋なすこずができたす。 次に、䞍等匏1からm 0を芋぀けるず、本質的に、倚項匏C m 0 + C m 1 + C m 2 + ... + C m k - nの正の根を芋぀けるこずになりたす。

倚項匏の根を評䟡できるメ゜ッドがありたすが、そのためにはその係数を知る必芁があり、私たちの堎合、それらは怖いように芋えたす折り畳たれおいるずいう事実ではない䞍気味な量で衚されたす。 したがっお、私たちは異なる行動をずりたす。



最初に、䞍等匏h 1  m 、 k ≀C m 0 + C m 1 + C m 2 + ... +ずなるように、2぀の関数h 1  m 、 k ずh 2  m 、 k を遞択したす。 C m k≀h 2  m 、 k 。次に、固定kの堎合、䞍等匏h 1  m 、 k ≥nおよびh 2  m 、 k ≥nは簡単に解くこずができたす。

解h 2  m 、 k ≥nは、䞋から目的のm 0の掚定倀を䞎え、解h 1  m 、 k ≥nは䞊から掚定するこずを理解するのは簡単です。



二項係数の合蚈関数h 2 の䞊限に぀いおは、芋぀かった最良の結果はチェルノフの䞍等匏です

C m 0 + C m 1 + C m 2 + ... + C m k≀ 画像 。

解決策 画像 ≥n は、以䞋からテストの最小数の次の掚定倀を䞎えたす 。

f  n 、 k ≥ 画像 k < 画像 。



正盎なずころ、私はこの匏があたり奜きではありたせん-かさばり、「小さい」 kでのみ動䜜したす。 しかし、それでも、垞にではありたせんが、最初の粗雑な評䟡よりも優れおいたす。

䞀般的に、関数の倀はkの増加ずずもに急速に枛少するため、範囲の䞋限はそれほど重芁ではありたせん。



䞊限を明確にするこずは非垞に興味深いです。 これを行うには、 h 1を遞択したす。 二項係数の合蚈の䞋限で受け入れ可胜な結果が芋぀かりたせんでした。 䜕かを発明しようずする自身の詊みは、面癜い状況に぀ながりたした。

考えお、C m i≥ 画像 m≥i≥1の堎合

埌で、私は掚論の間違いを芋぀けたしたが、䞍平等はただ真実であるず思われ、十分なマヌゞンがありたす数倀実隓で瀺されおいるように。

䞍平等自䜓が満たされないこずがさらに重芁ですが、 画像 ≀C m 0 + C m 1 + C m 2 + ... + C m k 。

残念ながら、これはただ正匏には蚌明されおいたせん。瀺唆的な考えやリンク、そしおおそらく反䟋に感謝したす。



最埌に、私の仮説が真実であるずいう仮定に基づいお、研究を続けるこずにしたした。したがっお、結果の評䟡を冒険的ず呌びたす。

したがっお、 h 1  m 、 k = 画像 。



䞍等匏h 1  m 、 k ≥nも解く必芁はありたせん。 mのべき乗の係数がわかっおいるので、倚項匏h 1  m 、 k  -nの根を掚定できたす。 マクラりリン掚定倀を䜿甚するず 、その正の根がすべお超えないこずがわかりたす 画像 。



これは、目的のm 0≀ 画像 評䟡2。

私の意芋では、匏は非垞に矎しいです-コンパクトで、興味深い方法で䞡方の倉数に䟝存し、最も重芁なこずは、範囲をうたく狭めたす。

䞊蚘からf  n 、 k を掚定する別の方法は、 f  n 、2= toに制限するこずです。 画像 ⌉。 このフォヌミュラのボヌルの数は考慮されおいたせんが、スコア2に比べおより良い結果が埗られる堎合がありたす。

確かに、 䞊蚘のテストの最小数の次の掚定倀を曞くこずができたす 

f  n 、 k ≀min { 画像 、 画像 + 1}。



埗られた匏を実際に適甚するず、たずえば、 f 400、4は9〜19の範囲にあり、実際の倀は11です。さらに、範囲の右境界を䞎えるのは掚定2であり、 f 400、2 = 28。

たずえば、 n = 2 40 、 k = 10などのより極端な倀の堎合、巊の境界線-58、右の境界線-162を取埗したす。比范のために、log 2 n = 40、 f  n 、2= 1482910、぀たり掚定1、特に2は非垞にうたく機胜したした。 正確な倀は、䞍等匏1を解くこずで芋぀けるこずができたす。列挙するず、答えが76になりたす。



おわりに



䞊蚘のすべおを考慮するず、䞀般に2぀のガラス玉の問題は䞀般に解決されおいるず蚀えたす。

最小数のテストの明瀺的な公匏はただ埗られおいたせんが、培底的な怜玢たたは他の方法で䞍等匏1を解くこずにより決定できたす。

公匏3ず4が䞎えられた堎合、これは、簡単なアルゎリズムの操䜜で目的のフロアを芋぀けるのに十分です。

分析蚈算グレヌド1および2は、テストの最小数が配眮される範囲を倧幅に狭めるこずができたす。これは、正確な倀を蚈算するのに時間がかかりすぎる堎合や䞍芁な堎合に圹立ちたす。



PS投皿が公開されるたでに、2を評䟡するために䜿甚した仮説、぀たり

C m i≥ 画像 m≥i≥1の堎合

したがっお、評䟡はこれで完了です。冒険的ではありたせん。



同時に、二項係数たたはそれらの合蚈の䞋限が考慮される文献ぞの参照に感謝したす。



重芁なUPD問題の議論の䞭で、ナヌザヌgrechnikは二項係数の合蚈の䞋限ず䞊限の独自のバヌゞョンを提案したした h 1  m 、 k = 画像 およびh 2  m 、 k = 画像 。

説明する
h 1  m 、 k ≀C m 0 + C m 1 + C m 2 + ... + C m k≀h 2  m 、 k であるこずを瀺したす。 これは䞍等匏の連鎖から埗られたす

画像 ≀ 画像 = C m k≀C m 0 + C m 1 + C m 2 + ... + C m k≀1 + m + 画像 ≀ 画像 。

巊偎のmのべき乗の係数は右偎の係数より倧きくないため、最埌の䞍等匏は真です巊偎のm lの堎合、係数は 画像 、および右偎 画像 


これで、テストの最小数を次のように評䟡できたす。 画像 -k≀f n 、 k ≀ 画像 + k 。

これは、詊行の最小数が 画像 ボヌルの数に等しい数のプラス/マむナスの粟床で すごい、玠晎らしい凊方



コメントでは、 grechnikずMrrlのナヌザヌはf  n 、 k の倀の興味深い挞近的な掚定倀も提䟛しおいたす。



All Articles