সাধারণভাবে জন্মদিনের সমস্যা


12

আজ রাতে, আমার বাগদত্তা আমার জন্মদিন উদযাপনের জন্য আমাকে ডিনারে নিয়ে গেলেন। আমরা যখন বাইরে ছিলাম তখন শুনলাম 50 জন লোকের পূর্ণ রেস্তোরাঁয় শুভ জন্মদিনে 5 জন পৃথক অতিথি (নিজেকে সহ) গেয়েছি। এটি আমার অবাক করে দিয়েছিল - আসল জন্মদিনের সমস্যাটি ( Nএকই ঘরে জন্মের জন্য লোকের ঘরে দু'জন লোক ভাগ করে নেওয়ার সম্ভাবনা খুঁজে পাওয়া ) খুব সহজ এবং সোজা। তবে কমপক্ষে kলোকের বাইরে থাকা Nলোকেরা একই জন্মদিনে যে সম্ভাবনা রয়েছে তা গণনা করার বিষয়ে কী বলা যায় ?

আপনি যদি ভাবছেন তবে একই জন্মদিনে অংশ নেওয়া 50 জন ব্যক্তির মধ্যে কমপক্ষে 5 জনের সম্ভাবনা প্রায় 1/10000।

চ্যালেঞ্জ

দুটি পূর্ণসংখ্যা Nএবং kযেখানে দেওয়া হয়েছে N >= k > 0, সম্ভাব্যতার আউটপুট দেয় যে কমপক্ষে kএকদল Nলোক একই জন্মদিনে ভাগ করে। জিনিসগুলি সহজ রাখতে, ধরে নিন যে সর্বদা ৩ 36৫ টি সম্ভাব্য জন্মদিন থাকে এবং সমস্ত দিনই সমানভাবে সম্ভব।

জন্য k = 2, এই মূল জন্মদিন সমস্যা নিচে boils, এবং সম্ভাব্যতা 1 - P(365, N)/(365)**N(যেখানে P(n,k)হয় এন উপাদান থেকে গঠিত K-দৈর্ঘ্য একাধিক বিন্যাসন )। এর বৃহত্তর মানগুলির জন্য k, এই ওল্ফ্রাম ম্যাথ ওয়ার্ল্ড নিবন্ধটি কার্যকর প্রমাণিত হতে পারে।

বিধি

  • আউটপুট অবশ্যই আপনার নির্বাচিত ভাষার জন্য নির্বিচারে এবং যথাসম্ভব নির্ভুল হতে হবে। এর অর্থ মন্টি কার্লো অনুমান বা পোইসন আনুমানিক নয়।
  • Nএবং kআপনার নির্বাচিত ভাষার বৃহত্তম উপস্থাপনযোগ্য পূর্ণসংখ্যার চেয়ে বড় হবে না। আপনার নির্বাচিত ভাষায় (মেমরি সীমাবদ্ধতা থেকে সরাইয়া) পূর্ণসংখ্যার কোন কঠিন সর্বাধিক থাকে, তাহলে Nkইচ্ছামত বড় হতে পারে।
  • ভাসমান-পয়েন্টের অসম্পূর্ণতা থেকে উদ্ভূত নির্ভুলতা ত্রুটি উপেক্ষা করা যেতে পারে - আপনার সমাধানটি নিখুঁত-নির্ভুল, অসীম-নির্ভুলতা ভাসমান হিসাবে ধরে নেওয়া উচিত।

পরীক্ষার কেস

বিন্যাস: k, N -> exact fraction (float approximation)

2, 4 -> 795341/48627125 (0.016355912466550306)
2, 10 -> 2689423743942044098153/22996713557917153515625 (0.11694817771107766)
2, 23 -> 38093904702297390785243708291056390518886454060947061/75091883268515350125426207425223147563269805908203125 (0.5072972343239854)
3, 3 -> 1/133225 (7.5060987051979735e-06)
3, 15 -> 99202120236895898424238531990273/29796146005797507000413918212890625 (0.0033293607910766013)
3, 23 -> 4770369978858741874704938828021312421544898229270601/375459416342576750627131037126115737816349029541015625 (0.01270542106874784)
3, 88 -> 121972658600365952270507870814168157581992420315979376776734831989281511796047744560525362056937843069780281314799508374037334481686749665057776557164805212647907376598926392555810192414444095707428833039241/238663638085694198987526661236008945231785263891283516149752738222327030518604865144748956653519802030443538582564040039437134064787503711547079611163210009542953054552383296282869196147657930850982666015625 (0.5110651106247305)
4, 5 -> 1821/17748900625 (1.0259790386313012e-07)
4, 25 -> 2485259613640935164402771922618780423376797142403469821/10004116148447957520459906484225353834116619892120361328125 (0.0002484237064787077)
5, 50 -> 786993779912104445948839077141385547220875807924661029087862889286553262259306606691973696493529913926889614561937/7306010813549515310358093277059651246342214174497508156711617142094873581852472030624097938198246993124485015869140625 (0.00010771867165219201)
10, 11 -> 801/8393800448639761033203125 (9.542757239717371e-23)
10, 20 -> 7563066516919731020375145315161/4825745614492126958810682272575693836212158203125 (1.5672327389589693e-18)
10, 100 -> 122483733913713880468912433840827432571103991156207938550769934255186675421169322116627610793923974214844245486313555179552213623490113886544747626665059355613885669915058701717890707367972476863138223808168550175885417452745887418265215709/1018100624231385241853189999481940942382873878399046008966742039665259133127558338726075853312698838815389196105495212915667272376736512436519973194623721779480597820765897548554160854805712082157001360774761962446621765820964355953037738800048828125 (1.2030611807765361e-10)
10, 200 -> 46037609834855282194444796809612644889409465037669687935667461523743071657580101605348193810323944369492022110911489191609021322290505098856358912879677731966113966723477854912238177976801306968267513131490721538703324306724303400725590188016199359187262098021797557231190080930654308244474302621083905460764730976861073112110503993354926967673128790398832479866320227003479651999296010679699346931041199162583292649095888379961533947862695990956213767291953359129132526574405705744727693754517/378333041587022747413582050553902956219347236460887942751654696440740074897712544982385679244606727641966213694207954095750881417642309033313110718881314425431789802709136766451022222829015561216923212248085160525409958950556460005591372098706995468877542448525403291516015085653857006548005361106043070914396018461580475651719152455730181412523297836008507156692430467118523245584181582255037664477857149762078637248959905010608686740872875726844702607085395469621591502118462813086807727813720703125 (1.21685406174776e-07)

9
শুভ জন্মদিন (বিমল)!
লুইস মেন্ডো

স্বল্প সংখ্যার জন্য পরীক্ষার কেস যোগ করতে পারেন?
লুইস মেন্ডো

@ লুইস মেন্ডো কয়েক ঘন্টা ঘুমানোর পরে আমি আরও কিছু যুক্ত করব :)
মেগো

6
এটি লক্ষণীয় যে, কোনও রেস্তোরাঁয় লোকেরা খাওয়ার সম্ভাবনা সম্ভবত তাদের জন্মদিনের তুলনায় স্বতন্ত্র নয়, সুতরাং ৫০ জনের মধ্যে পাঁচটি জন্মদিনের সম্ভাবনা সম্ভবত জন্মদিনের সমস্যা যুক্তির পরামর্শের চেয়ে বেশি।
গ্লেন ও

@ GlenO গুড পয়েন্ট!
লুইস মেন্ডো

উত্তর:


3

জেলি , 17 16 বাইট

ĠZL
365ṗÇ€<¬µS÷L

চূড়ান্তভাবে অদক্ষ। এটি অনলাইন চেষ্টা করুন! (তবে এনকে 3 এর নীচে রাখুন )

কিভাবে এটা কাজ করে

365ṗÇ€<¬µS÷L  Main link. Left argument: N. Right argument: K

365ṗ          Cartesian product; generate all lists of length N that consist of
              elements of [1, ..., 365].
    ǀ        Map the helper link over all generated lists. It returns the highest
              amount of people that share a single birthday.
      <       Compare each result with K.
       ¬      Negate.
        µS÷L  Take the mean by dividing the sum by the length.


ĠZL           Helper link. Argument: A (list of integers)

Ġ             Group the indices have identical values in A.
 Z            Zip; transpose rows with columns.
  L           Take the length of the result, thus counting columns.

1
"N কে 3 এর নীচে রাখুন" ... এটি কি অত্যধিক সীমাবদ্ধ নয়?
নিল

2
@ নীল সমাধানটি সমস্ত ইনপুটগুলির জন্য বৈধ, তবে অনলাইন দোভাষী দেরী ইনপুটগুলি চালাতে সক্ষম হবে না যেখানে এন> 3, মেমরি এবং সময়সীমাবদ্ধতার কারণে।
মেগো

@Mego আমি শুধু ভাবছিলাম যে কারণ এটা অনেক অর্থে দেখা যায় না আপনি না k > 1, তারপর দেওয়া k <= N, যদি আপনি তারপর রাখতে চান N < 3, যে মান জন্য অনেক পছন্দ ছাড়বে না Nএবং kআপনি চেষ্টা করতে পারেন।
নীল

4

এমএটিএল , 16 বাইট

365:Z^!tXM=s>~Ym

প্রথম ইনপুট হয় N, দ্বিতীয় হয় k

এটি অনলাইন চেষ্টা করুন!

এটি ডেনিসের জেলি উত্তরের মতো একটি গণনা-ভিত্তিক পদ্ধতি , সুতরাং মেমরির সীমাবদ্ধতার কারণে ইনপুট সংখ্যাগুলি ছোট রাখা উচিত।

365:   % Vector [1 2 ... 365]
Z^     % Take N implicitly. Cartesian power. Gives a 2D array with each
       % "combination" on a row
!      % Transpose
t      % Duplicate
XM     % Mode (most frequent element) of each column
=      % Test for equality, element-wise with broadcast. For each column, gives
       % true for elements equal to that column's mode, false for the rest
s      % Sum of each column. Gives a row vector
>~     % Take k implicitly. True for elements equal or greater than k
Ym     % Mean of each column. Implicitly display

2
আপনি ডেনিসকে ছাড়িয়ে গেছেন, ভালো কাজ।
এম 654

4
@ এম 654 আসুন দেখুন তিনি কখন জেগে উঠবেন :
লুইস মেন্ডো

2
ঠিক আছে, আমি জেগেছি, তবে আমি সবচেয়ে ভাল পরিচালনা করেছি টাই। জেলির আসলেই একটি গড় পরমাণু দরকার ...
ডেনিস

@ ডেনিস আমিও একই কথা ভাবছিলাম। একটি মোড পরমাণু খুব সম্ভবত?
লুইস মেন্ডো

0

জে, 41 36 বাইট

(+/%#)@(<:365&(#~>./@(#/.~)@#:i.@^))

অন্যদের মতোই সোজা-ফরোয়ার্ড অ্যাপ্রোচ। এন> 3 এ মেমরির সমস্যার মধ্যে চলে ।

ব্যবহার

kএলএইচএস এবং nআরএইচএসে মান নেয় ।

   f =: (+/%#)@(<:365&(#~>./@(#/.~)@#:i.@^))
   0 f 0
0
   0 f 1
1
   1 f 1
1
   0 f 2
1
   1 f 2
1
   2 f 2
0.00273973
   0 f 3
1
   1 f 3
1
   2 f 3
0.00820417
   3 f 3
7.5061e_6

আমার পিসিতে, i7-4770k এবং টাইমার বিদেশী টাইম ব্যবহার করে 6!:2, এন = 3 এর জন্য কম্পিউটিংয়ের জন্য 25 সেকেন্ডের প্রয়োজন।

   timer =: 6!:2
   timer '2 f 3'
24.7893
   timer '3 f 3'
24.896

ব্যাখ্যা

(+/%#)@(<:365&(#~>./@(#/.~)@#:i.@^)) Input: k on LHS, n on RHS
          365&                       The number 365
               #~                    Create n copies of 365
                                 ^   Calculate 365^n
                              i.@    The range [0, 1, ..., 365^n-1]
                            #:       Convert each value in the range to base-n and pad
                                     with zeroes to the right so that each has n digits
                     (#/.~)@         Find the size of each set of identical values
                 >./@                Find the max size of each
        <:                           Test each if greater than or equal to k
(+/%#)@                              Apply to the previous result
 +/                                  Find the sum of the values
    #                                Count the number of values
   %                                 Divide the sum by the count and return
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.