アルゴリズム(貧しい豚)

1000個のバケツ、バレルと毒が含まれているの一つだけ、残りは水で満たされているがあります。彼らはすべての外観は同じように見えます。豚は毒を飲んだ場合、それは15分以内に死ぬであろう。

あなただけ、あなたは豚の最小数を必要としている毒を含むバケット見つけるために、時間以内に必要がある場合質問は、ありますか?

この質問に回答し、以下の高度な問題のための一般的なアルゴリズムを準備します。

 

高度:

仮定があるだけのn飲酒毒豚後のバケットは、m個の数分以内に豚の数(x)を使用すると、バケットのp分で「有毒」を見つけることができるようにする必要があります死にますか?このnが一つだけしか1つのバケット毒性バレルを持っています。

 

ヒント:

子豚の飲料水は、同時にバケットの任意の数を可能にすることができる、そしてプロセスは時間を必要としません。
豚の飲料水の後、m個分のクールダウンがなければなりません。この間、許可のみを確認したが、飲酒を継続することが許可されていません。
任意の与えられたバケット無制限のサンプリング(豚の数は無制限)。

アイデア:
タグ:数学

この質問は、多くの人々がもつれますが、一目見ただけである:最後のニーズの子豚の数は、水の各ブタと飲み物たくさんだけ毒の入ったバケツを持っているかを決定する方法について具体的にすべきですか?

この質問は細部に注意を払うにはない始めて、最終的に水やりについて考えるべきか。しかし、最初の数学の研究では、配列、リンクリスト、二分木または何側面を考えるべき?だから、慎重について本質的にバイナリで数学の研究における問題ということを結論することができるようになると思います。

例えば:

仮定:合計時間minutesToTest = 60、死の時間minutesToDie = 15は、POW(x、 y)は、Xのy乗を表す、CEIL(X)であり、xは切り上げ
電流11子豚を倍にアップ飲ん= minutesToTest / minutesToDieは= 4回水を
最大44まで飲料水に、(理解を容易00から開始される)=時間+ 1 = 5番目の情報、塩基を運ぶことができる:
(1)毒性水のダイ00、00バレル飲料
( 2)飲料ダイ11、第11号毒性バケット
(3)飲料ダイ22、バケット22毒性
(4)飲料ダイ33,33毒性バケツ
水のすべてを飲む(5)は、ジャンプの上に依然として44であります毒性水の番号バケット
11匹のブタはバケット≤5市、答え= 1つの、毒を含有するバケツに水のみ最大55バレルを検証することができると結論づけた
22子豚の最大数は、それの範囲を確認することができますか?我々の情報の各ブタ量はベースの16進数としての実施、情報22子豚の量はPOW(ベース、2)= POWである (5、2)= 25、 そう5つの≤バケット≤25 、anwser = 2
次に関係式が得られる:POW(ベース、ANS)≥バケットは、 の対数を取った後:ANS≥ログ(バケット)/ログ(ベース)、 (ANS = CEILように、整数としてログ(ANSバケット)/ログ(ベース))

poorPigs FUNC(INTバケット、minutesToDie INT、INT minutesToTest){int型
    時間:= minutesToTest / minutesToDie 
    タイムズタイムズ+ 1 =。
    結果:= Math.log(のfloat64(バケット))/ Math.log(のfloat64(倍))
    戻りINT( Math.ceil(結果))
} 

著者:曹操-のCaO-のCaO-江 -jiang 
リンクします。https://leetcode-cn.com/problems/poor-pigs/solution/golang-shi-xian-fang-fa-by -CaO-のCaO-のCaO-jiang-江/ 
ソース:滞在ボタン(LeetCode)
著者によって予約の著作権。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。

  

おすすめ

転載: www.cnblogs.com/cjjjj/p/12508221.html