জানালা দিয়ে বিড়াল ছুঁড়ে ফেলেছে


150

কল্পনা করুন আপনি একটি বিড়াল নিয়ে একটি উঁচু ভবনে রয়েছেন। একটি ছোট গল্পের উইন্ডো থেকে পড়ে বিড়ালটি বাঁচতে পারে তবে একটি উচ্চ তল থেকে ফেলে দিলে মারা যাবে। সর্বনিম্ন প্রচেষ্টা ব্যবহার করে আপনি কীভাবে বিড়ালটি বেঁচে থাকতে পারবেন এমন দীর্ঘতম ড্রপটি কীভাবে আবিষ্কার করতে পারেন?

স্পষ্টতই, যদি আপনার কেবল একটি বিড়াল থাকে তবে আপনি কেবল রৈখিকভাবে অনুসন্ধান করতে পারেন। প্রথমে বিড়ালটিকে প্রথম তল থেকে ফেলে দিন। যদি এটি বেঁচে থাকে তবে দ্বিতীয় থেকে ফেলে দিন। অবশেষে, মেঝে থেকে ছোঁড়ার পরে, বিড়াল মারা যাবে। আপনি তখন জানেন যে ফ্লোর এফ -1 সর্বাধিক নিরাপদ তল ছিল।

তবে আপনার যদি একাধিক বিড়াল থাকে? আপনি এখন কিছু প্রকারের লগারিদমিক অনুসন্ধান করতে পারেন। ধরা যাক যে বিল্ডটিতে 100 তলা রয়েছে এবং আপনার কাছে দুটি অভিন্ন বিড়াল রয়েছে। যদি আপনি প্রথম বিড়ালটিকে 50 তলা থেকে ফেলে দেন এবং এটি মরে যায়, তবে আপনাকে কেবল 50 তলগুলি রৈখিকভাবে অনুসন্ধান করতে হবে। আপনি যদি প্রথমবারের জন্য নীচের তলটি বেছে নেন তবে আপনি আরও ভাল করতে পারেন। ধরা যাক যে আপনি একবারে 20 তল সমস্যাটি মোকাবেলা করতে বেছে নিয়েছেন এবং প্রথম মারাত্মক তলটি # 50। সেক্ষেত্রে আপনার প্রথম বিড়ালটি 60 ও তল থেকে মারা যাওয়ার আগে 20 এবং 40 ফ্লোরের ফ্লাইটগুলিতে টিকে থাকবে You এটি মোট 12 টি প্রচেষ্টা, যা আপনি বাইনারি নির্মূলের চেষ্টা করার চেষ্টা করলে 50 এর চেয়ে অনেক ভাল।

সাধারণভাবে, সেরা কৌশল কী এবং এটি 2 বিড়াল সহ একটি এন-তলা ভবনের জন্য সবচেয়ে খারাপ জটিলতা? এন ফ্লোর এবং এম বিড়ালদের সম্পর্কে কী?

ধরে নিন যে সমস্ত বিড়াল সমান: তারা সবাই বেঁচে থাকবে বা প্রদত্ত উইন্ডো থেকে পড়ে মারা যাবে। এছাড়াও, প্রতিটি প্রচেষ্টা স্বাধীন: একটি বিড়াল যদি একটি পতন থেকে বেঁচে থাকে, তবে এটি সম্পূর্ণরূপে ক্ষতিগ্রস্থ নয়।

এটি হোমওয়ার্ক নয়, যদিও আমি এটি স্কুল অ্যাসাইনমেন্টের জন্য একবার সমাধান করেছি। এটি কেবল একটি হাস্যকর সমস্যা যা আজ আমার মাথায় .ুকে গেছে এবং সমাধানটির কথা মনে নেই। বোনাস পয়েন্টস যদি কেউ এই সমস্যার নাম বা সমাধান অ্যালগরিদমের নাম জানেন।


123
আমি বর্ণিত পদ্ধতিতে বিড়ালদের ব্যবহার করতে আপত্তি জানাই। আমরা কি এটি কুকুরে বদলাতে পারি?
Thilo

53
এটা অত সস্তা না. অধ্যয়ন করা হয়েছে (বিড়ালগুলি দুর্ঘটনাক্রমে আকাশচুম্বী ছড়িয়ে পড়ে, ফেলে দেওয়া হচ্ছে না)। তারা মারা গিয়েছিল সেখানে একটি নির্দিষ্ট পরিসর ছিল এবং তারা বেঁচে গেছে যেখানে এই জায়গা থেকে *** উচ্চতর একটি পরিসর ছিল। তারা কীভাবে তাদের দেহকে টান দিয়েছিল Some
অ্যান্ড্রু শেফার্ড

5
আমি কোথাও পড়েছি যে 15 ফিট বা তারও বেশি উপরে, বিড়ালদের বেঁচে থাকার আরও বেশি সম্ভাবনা রয়েছে। এই প্রবন্ধটি যদি আমরা প্রাক্তন বান্ধবী এবং / অথবা নগন্য স্ত্রীদের বাদ দিই তবে আরও উপযুক্ত suited
অ্যান্টনি ফোরলনি

34
আপনি জানেন, আপনি যদি দুটি বিড়াল দিয়ে শুরু করেন তবে আপনাকে কয়েকমাস অপেক্ষা করতে হবে এবং তারপরে একটি বাইনারি অনুসন্ধান চালানো উচিত। বা তার কয়েক মাস পরে অপেক্ষা করুন এবং একটি "যুগপত অনুসন্ধান" করুন, যাতে আপনি প্রতিটি তল থেকে একই সাথে বিড়াল ছুঁড়ে মারতে সাহায্যকারী পেতে পারেন - সেই ক্ষেত্রে বেঁচে থাকা বিড়ালদের গণনাটি অবশ্যই আপনি তাদের ফেলে দিতে পারেন এমন উচ্চতম তল সংখ্যা course ।
mjfgates

10
খরগোশ সহ, "মাস" থেকে "সপ্তাহ" পরিবর্তন করুন।
mjfgates

উত্তর:


70

এন ফ্লোর এবং এম বিড়ালের সাধারণ ক্ষেত্রে আপনি সহজেই একটি সামান্য ডিপি (ডায়নামিক প্রোগ্রামিং) লিখতে পারেন।

মূল সূত্রটি, a[n][m] = min(max(a[k - 1][m - 1], a[n - k][m]) + 1) : for each k in 1..nস্ব-ব্যাখ্যামূলক হওয়া উচিত:

  • যদি প্রথম বিড়াল কে-থ তল থেকে ফেলে দেওয়া হয় এবং মারা যায় তবে আমাদের এখন k - 1তলগুলি আছে (নীচে সমস্ত k) এবং m - 1বিড়ালগুলি ( a[k - 1][m - 1])।
  • যদি বিড়াল বেঁচে থাকে তবে সেখানে n - kফ্লোরগুলি বাকি রয়েছে (উপরে সমস্ত ফ্লোর k) এবং এখনও mবিড়াল।
  • দু'জনের মধ্যে সবচেয়ে খারাপ পরিস্থিতি বেছে নেওয়া উচিত max
  • + 1 এ থেকে আসে যে আমরা কেবল একটি প্রচেষ্টা ব্যবহার করেছি (বিড়াল বেঁচে আছে কিনা তা নির্বিশেষে)।
  • আমরা সর্বোত্তম ফলাফলটি খুঁজে পেতে প্রতিটি সম্ভাব্য তল চেষ্টা করি min(f(k)) : for k in 1..n

এটি গৌরব সাক্সেনার লিঙ্ক থেকে (100, 2) গুগলের ফলাফলের সাথে একমত ।

int n = 100; // number of floors
int m = 20; // number of cats
int INFINITY = 1000000;

int[][] a = new int[n + 1][m + 1];
for (int i = 1; i <= n; ++i) {
    // no cats - no game
    a[i][0] = INFINITY;
}

for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
        // i floors, j cats
        a[i][j] = INFINITY;

        for (int k = 1; k <= i; ++k) {
            // try throw first cat from k-th floor
            int result = Math.max(a[k - 1][j - 1], a[i - k][j]) + 1;
            a[i][j] = Math.min(a[i][j], result);
        }
    }
}

System.out.println(a[n][m]);

আপনি সহজেই কৌশল খুঁজে পেতে পারেন (প্রথম বিড়ালটিকে কীভাবে নিক্ষেপ করবেন), যদি আপনি kঅন্য অ্যারেতে সেরা সঞ্চয় করেন ।

ও (এন ^ 3) গণনা জড়িত না করে একটি দ্রুত সমাধানও রয়েছে, তবে আমি ইতিমধ্যে কিছুটা ঘুমিয়েছি।

সম্পাদন করা
ওহ হ্যাঁ, আমার মনে আছে যেখানে আমি আগে এই সমস্যা দেখেছি


হুম, এর + 1বাইরে থাকার দরকার নেই min()? আপনি যেমন নিজেকে বলেছিলেন, চেষ্টা সফল কিনা বা না, এটি এখনও একটি প্রচেষ্টা।
j_random_hacker

@ j_random_hacker এটি কিছু পরিবর্তন করে? এর +1বাইরে চলেছে min। বা এটি এর ভিতরে নিয়ে চলেছে max:)
নিকিতা রাইবাক

@ নিকিতা: আমি দুঃখিত যে আমি আপনার লেখাটি ভুলভাবে লিখেছি - আপনার কাছে যা আছে তা আমার মতে যথাযথ! +1 টি।
j_random_hacker

মনে রাখবেন এটি গুগল কোড জ্যামের "ডিম ড্রপ সমস্যা" এর মতো is নীচের ও (এন ^ 3) সমাধানটি যথেষ্ট ভাল নয়, কারণ বড় সমস্যা সেটটি এন = 2000000000
code কোড.

1
ও (এন) অ্যালগরিদমের জন্য এই নতুন প্রশ্নটি দেখুন। গুগল কোড জ্যামের শীর্ষস্থানীয় উত্তরটি হ'ল (এন), তবে আমি এখনও এটি বুঝতে পারি না। stackoverflow.com/questions/4699067/...
ripper234

92

রেডিওল্যাবের সাম্প্রতিক একটি পর্ব অনুসারে (প্রায় "পতন") অনুযায়ী , একটি বিড়াল নবম তলায় টার্মিনাল গতিতে পৌঁছেছে। এর পরে, এটি শিথিল হয় এবং আহত হওয়ার সম্ভাবনা কম থাকে। 30 তম উপরে থেকে পড়ে যাওয়ার পরে সম্পূর্ণ অচেতন বিড়াল রয়েছে। ঝুঁকিপূর্ণ মেঝে 5 ম থেকে 9 তম।


16
একটি বিড়াল ব্যক্তি হিসাবে, আমি এটি উল্লেখ করতে চাই যে এই অধ্যয়নটি হস্তান্তর ঘটনার পরে প্রাণী হাসপাতালের রিপোর্টের ভিত্তিতে হয়েছিল। এই তদন্তে কোনও অতিরিক্ত বিড়াল আহত বা অসুবিধে হয় নি।
থিলো

16
উত্তর নয়, ব্যবসায়ের ডোমেন থেকে কিছু অতিরিক্ত প্রসঙ্গ।
থিলো

19
এটি প্রশ্নের উত্তর যতটা প্রাপ্য।
মার্ক রান্সম

2
এটি কেবলমাত্র লাইভ = 1, ডাই = 0 কে ফলাফল হিসাবে দেখায় না তবে লাইভ = 1.0, ডাই = 0.0 এবং এর মধ্যে থাকা সমস্ত কিছুর সম্ভাবনা রয়েছে। এটি একটি বাঁক, কোনও লাইন নয়, এটি আবিষ্কার করা দরকার be
tadman

73
এই প্রতিবেদনের সমস্যাটি হল নির্বাচন পক্ষপাতিত্ব - কেউ মৃত বিড়ালটিকে পশুচিকিত্সার কাছে নিয়ে যায় না।
নিকি যোশিউচি

10

কল্পনা করুন আপনি একটি বিড়াল নিয়ে একটি উঁচু ভবনে রয়েছেন। একটি ছোট গল্পের উইন্ডো থেকে পড়ে বিড়ালটি বাঁচতে পারে তবে একটি উচ্চ তল থেকে ফেলে দিলে মারা যাবে। সর্বনিম্ন প্রচেষ্টা ব্যবহার করে আপনি কীভাবে বিড়ালটি বেঁচে থাকতে পারবেন এমন দীর্ঘতম ড্রপটি কীভাবে আবিষ্কার করতে পারেন?

এই সমস্যাটি সমাধানের সর্বোত্তম কৌশলটি হচ্ছে তদন্ত করা, পদার্থবিজ্ঞানের আইন ব্যবহার করে, আপনার অনুমানের সম্ভাবনা প্রথম স্থানে থাকা।

আপনি যদি এটি করেন তবে আপনি বুঝতে পারবেন যে বিড়ালের বেঁচে থাকার সম্ভাবনা প্রকৃতপক্ষে স্থলপথের উচ্চতর দূরত্বকে বাড়িয়ে তুলবে। অবশ্যই ধরে নেওয়া, আপনি এটিকে পেট্রোনাস টাওয়ারের মতো কোনও উচ্চতর বিল্ডিং থেকে ছুঁড়ে ফেলেছেন এবং কখনও কখনও মাউন্ট ইভেরেস্টের মতো কোনও উঁচু পর্বত নয়।

সম্পাদনা:
আসলে, আপনি একটি অসম্পূর্ণ উটের বিতরণ দেখতে পাবেন।
প্রথমত, বিড়াল মারা যাওয়ার সম্ভাবনা কম (খুব কম উচ্চতা), তারপরে এটি উচ্চ (নিম্ন উচ্চতা), তারপরে আবার নিম্ন (উচ্চতর উচ্চতা) এবং তারপরে আবার উচ্চতর (খুব উচ্চতা) হয়।

মাটির উপরে উচ্চতার ক্রিয়া হিসাবে বিড়াল মারা যাওয়ার সম্ভাবনার জন্য গ্রাফটি দেখতে এই রকম:
(3 এ শেষ করুন, কারণ অসমাপ্ত উট বিতরণ)

বিকল্প পাঠ

আপডেট:
একটি বিড়ালের টার্মিনাল গতি 100 কিলোমিটার / ঘন্টা (60 মাইল প্রতি ঘন্টা) [= 27.7 মি / সে = 25.4 গজ / সে]।
মানব টার্মিনাল গতিবেগ 210 কিমি / ঘন্টা (130 মাইল প্রতি ঘন্টা) [[= 75 মি / স = 68.58 গজ / সে]

টার্মিনাল বেগ উৎস:
http://en.wikipedia.org/wiki/Cat_righting_reflex

ক্রেডিট:
Goooooogle

: আমি যাচাই করতে পরে প্রয়োজন
http://en.wikipedia.org/wiki/Terminal_velocity
http://www.grc.nasa.gov /WWW/K-12/airplane/termv.html



2
এটা কি সঠিক? অবশ্যই একবারে টার্মিনাল বেগ পৌঁছে গেলে সম্ভাবনা পরিবর্তন হতে পারে না - এবং আমি এই ছাপে ছিলাম যে একটি বিড়াল টার্মিনাল গতিতে টিকে থাকতে পারে।
ZoFreX

4
@ জোফ্রেক্স: অবশ্যই তারা পারবেন, এটি কেবলমাত্র নীচের টার্মিনাল বেগ যা সবচেয়ে মারাত্মক। অন্যদিকে, একটি বিড়ালকে ছাড়ুন, এক লক্ষ মাইল দূরে বলুন এবং বিড়ালটি শূন্যস্থান থেকে পড়ে মারা যাওয়ার পরে বায়ুমণ্ডলে জ্বলে ওঠার সম্ভাবনা বেশি।
ডেভিড থর্নলে

1
সেই গ্রাফিগুলিতে কি সেই বুনি কান রয়েছে?
নিনজালজ

1
@ জোফ্রেক্স: কৌণিক গতিবেগ। একটি বিড়াল সর্বদা তার পায়ে অবতরণ করে, কৌনিক গতির কারণে বিড়ালের শরীরের নকশা এবং বিড়ালের বাঁক দক্ষতা। তবে এর অর্থ এখনও ঘুরতে সময় প্রয়োজন। যত বেশি সময় থাকে (==> উচ্চতা উচ্চতর) ততই বিড়াল তার পায়ে অবতরণ করবে (==> বেঁচে থাকার সম্ভাবনা নাটকীয়ভাবে বৃদ্ধি পাবে, যেমন মাথার উপরে অবতরণের বিপরীতে)। তবে আপনি ঠিক বলেছেন, টার্মিনাল গতিতে পৌঁছানোর পরে সম্ভাবনা একই থাকে। আমি বলব এটি সম্ভবত একটি বিড়াল টার্মিনাল গতিতে পড়ে বাঁচতে পারে, কমপক্ষে আমার একটি স্ক্র্যাচ ছাড়াই বাথরুমের উইন্ডোটি (অ্যাপেক্স। 20 মিটার) ঝাঁপিয়ে পড়েছিল।
স্টেফান স্টেইগার

8

আমি প্রথম এই সমস্যাটি স্টিভেন স্কিয়েনার অ্যালগরিদম ডিজাইন ম্যানুয়ালে (অনুশীলন 8.15) পড়েছি । এটি গতিশীল প্রোগ্রামিংয়ের একটি অধ্যায় অনুসরণ করেছে, তবে কৌশলটির সুনির্দিষ্ট সীমা প্রমাণ করার জন্য আপনার ডায়নামিক প্রোগ্রামিংয়ের দরকার নেই । প্রথমে সমস্যার বিবৃতি, তারপরে নীচের সমাধান।

ডিমগুলি যথেষ্ট পরিমাণে উচ্চতা থেকে নেমে গেলে ভেঙে যায়। একটি এন-স্টোর বিল্ডিং দেওয়া আছে, অবশ্যই একটি ফ্লোর এফ থাকতে হবে যাতে ফ্লোর এফ ব্রেক থেকে ডিম ফেলে দেওয়া হয়, তবে ফ্লোর এফ -1 থেকে ডিমগুলি টিকে থাকে। (ডিম যদি কোনও তল থেকে ভেঙে যায়, তবে আমরা f = 1 বলব If ডিম যদি কোনও তল থেকে বেঁচে থাকে, তবে আমরা f = n + 1 বলব)।

আপনি সমালোচনামূলক মেঝে সন্ধান করতে চাইছেন চ। আপনি কেবলমাত্র অপারেশন করতে পারেন তা হল কিছু তলা থেকে একটি ডিম ফেলে এবং কী ঘটে তা দেখুন। আপনি কে ডিমের ডিম দিয়ে শুরু করবেন এবং যতবার সম্ভব ডিম ছাড়বেন। ভাঙা ডিম আবার ব্যবহার করা যায় না (অক্ষত ডিম পারে) can E (কে, এন) এর সর্বদা পর্যাপ্ত পরিমাণে ডিমের ড্রপিংয়ের সর্বনিম্ন সংখ্যা হোক।

  1. E (1, n) = n দেখান।
  2. যে দেখান E(k,n) = Θ(n**(1/k))
  3. E (কে, এন) এর জন্য একটি পুনরাবৃত্তি সন্ধান করুন। ই (কে, এন) সন্ধানের জন্য গতিশীল প্রোগ্রামের চলমান সময়টি কী?

মাত্র 1 টি ডিম

প্রথম থেকে শুরু করে প্রতিটি তল থেকে ডিম ফেলে দেওয়া সমালোচনামূলক মেঝে (সবচেয়ে খারাপ) এন ক্রিয়াকলাপে পাবেন।

এর চেয়ে দ্রুত কোনও অ্যালগরিদম নেই। যে কোনও অ্যালগরিদমে যে কোনও সময়, ডিমটি ভাঙ্গতে না দেখা গেছে এমন সর্বোচ্চ ফ্লোরটি যাক g যে কোনও উচ্চতর তল h> g + 1 এর আগে অ্যালগরিদমকে অবশ্যই ফ্লোর জি + 1 পরীক্ষা করতে হবে, অন্যথায় যদি ডিমটি ফ্লোর এইচ থেকে ভেঙে ফেলা হয়, তবে এটি f = g + 1 এবং f = h এর মধ্যে পার্থক্য করতে পারে না।

২ টি ডিম

প্রথমে আসুন কে = 2 টি ডিমের ক্ষেত্রে বিবেচনা করা যাক, যখন এন = আর ** 2 একটি নিখুঁত বর্গ হয়। এখানে একটি কৌশল যা O (sqrt (n)) সময় নেয়। আর ফ্লোরের ইনক্রিমেন্টে প্রথম ডিম ফেলে দিয়ে শুরু করুন। প্রথম ডিমটি ভাঙ্গলে, মেঝেতে বলুন ar, আমরা জানি সমালোচনামূলক তলটি চ অবশ্যই হবে (a-1)r < f <= ar। তারপরে আমরা প্রতিটি তল থেকে দ্বিতীয় ডিমটি রেখে দিই (a-1)r। দ্বিতীয় ডিম ভাঙার পরে আমরা সমালোচনামূলক মেঝেটি খুঁজে পেয়েছি। আমরা প্রতিটি ডিম সর্বাধিক আর সময়ে ফেলে দিয়েছি, সুতরাং এই অ্যালগরিদমটি সবচেয়ে খারাপ 2-টি অপারেশন নেয়, যা Θ (স্কয়ার্ট (এন))।

যখন এন একটি নিখুঁত চতুর্ভুজ নয়, R = নিতে ceil(sqrt(n)) ∈ Θ(sqrt(n))। অ্যালগরিদমটি Θ (স্কয়ার্ট (এন)) থেকে যায়।

প্রমাণ যে কোনও অ্যালগোরিদম কমপক্ষে স্কয়ার্ট (এন) সময় নেয়। মনে করুন একটি দ্রুত অ্যালগরিদম আছে। তলগুলির ক্রমটি বিবেচনা করুন যা থেকে এটি প্রথম ডিম ফোঁটা করে (যতক্ষণ না এটি ভেঙে না)। যেহেতু এটি স্কয়ার্ট (এন) এর চেয়ে কম নেমেছে, সেখানে কমপক্ষে n / sqrt (n) এর অন্তর থাকতে হবে যা স্কয়ার্ট (এন)। এফ যখন অন্তর অন্তর থাকে তখন অ্যালগরিদমকে এটি দ্বিতীয় ডিমের সাথে তদন্ত করতে হবে এবং এটি অবশ্যই 1-ডিমের ক্ষেত্রে স্মরণ করে মেঝে-তলায় করতে হবে। অসঙ্গতি।

কে ডিম

2 টি ডিমের জন্য উপস্থাপিত অ্যালগরিদম সহজেই কে ডিমগুলিতে বাড়ানো যেতে পারে। প্রতিটি ডিম ধ্রুবক বিরতিতে ফেলে দিন, যা এন এর কাঠের মূলের শক্তি হিসাবে নেওয়া উচিত। উদাহরণস্বরূপ, এন = 1000 এবং কে = 3 এর জন্য প্রথম ডিমের সাথে 100 তল, দ্বিতীয় ডিমের সাথে 10 এবং শেষ ডিমের সাথে 1 টি অন্তর অনুসন্ধান করুন।

একইভাবে, আমরা প্রমাণ করতে পারি যে কোনও অ্যালগরিদম Θ(n**(1/k))কে = 2 প্রমাণ থেকে অন্তর্ভুক্ত করে দ্রুত হয় না।

সঠিক সমাধান

প্রথম ডিমটি (তল ছ) কোথায় বাদ দিতে হবে তা অনুগ্রহ করে আমরা পুনরাবৃত্তিটি হ্রাস করি, অনুমান করে আমরা ছোট পরামিতিগুলির অনুকূল সমাধানগুলি জানি know যদি ডিম ভেঙে যায় তবে কে -1 ডিম নিয়ে অন্বেষণ করতে আমাদের নীচে জি -1 তল রয়েছে। ডিমটি যদি বেঁচে থাকে, কে ডিমের সাহায্যে অন্বেষণ করতে আমাদের উপরে এনজি ফ্লোর রয়েছে। শয়তান আমাদের জন্য সবচেয়ে খারাপ পছন্দ করে। সুতরাং কে> 1 এর পুনরাবৃত্তি

E(k,n) = min(max(E(k,n-g), E(k-1,g))) minimised over g in 1..n

আমার যদি কে ডিম থাকে O(k*n**(1/k))তবে সবচেয়ে খারাপ অবস্থার জন্য রানটাইমটি কেন নয় ? যেহেতু সবচেয়ে খারাপ ক্ষেত্রে আমাকে n**(1/k) ঠিক kসময়ে যেতে হবে ।
Rakete1111

2

এটি কি ধরে নেয় না আপনি "দ্য সেম ক্যাট" ব্যবহার করছেন?

আপনি গাণিতিকভাবে এটি ব্যবহার করতে পারেন, তবে এটি গণিত সম্পর্কে দুর্দান্ত জিনিস ... সঠিক অনুমানের সাথে 0 0 সমান করতে পারে (0 এর বৃহত মানের জন্য)।

ব্যবহারিক অবস্থান থেকে আপনি 'অনুরূপ বিড়াল "পেতে পারেন, তবে আপনি" দ্য সেম ক্যাট "পেতে পারেন না।

আপনি উত্তরটি যথাযথভাবে নির্ধারণ করার চেষ্টা করতে পারেন, তবে আমি মনে করব যে পর্যাপ্ত পরিসংখ্যানগত পার্থক্য থাকবে যে উত্তরটি পরিসংখ্যানগতভাবে অর্থহীন হবে।

আপনি "দ্য সেম ক্যাট" ব্যবহারের চেষ্টা করতে পারেন, তবে এটি কার্যকর হবে না, যেমন প্রথম ড্রপের পরে, আর সেই একই বিড়ালটি আর থাকবে না। (একইভাবে, ওনকান কখনও একই নদীতে দু'বার পা বাড়ায় না)

অথবা, আপনি বিড়ালটির স্বাস্থ্যকে একত্রে নিখুঁত বিরতিতে নমুনা তৈরি করতে এবং বিড়ালটি "বেশিরভাগ জীবিত" ("রাজকন্যা বিবাহ" এর "বেশিরভাগ মৃত" বিরোধী) উচ্চতাগুলি খুঁজে পেতে পারেন find বিড়ালগুলি বেঁচে থাকবে, গড়ে (শেষ বিরতি পর্যন্ত)।

আমি মনে করি আমি আসল অভিপ্রায় থেকে বিভ্রান্ত হয়ে পড়েছি, তবে আপনি যদি অভিজ্ঞতাবাদী পথে চলে যাচ্ছেন তবে আমি যতটা সম্ভব উচ্চতর শুরু করতে এবং বিড়ালকে যতক্ষণ না পরিসংখ্যানিকভাবে বেঁচে রাখার অবধি কমতে থাকে ততক্ষণ আমি ভোট দিয়েছি। এবং তারপরে নিশ্চিত হওয়ার জন্য বেঁচে থাকা বিড়ালদের পুনরায় পরীক্ষা করুন।


0

আমি সমাধান তৈরি করতে কিছুটা আলাদা পদ্ধতি নিয়েছি।

আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করে এক্স বিড়াল এবং y অনুমান ব্যবহার করে আচ্ছাদিত সর্বাধিক তলটি কাজ করে শুরু করেছি ।

1 তলা দিয়ে শুরু করুন এবং মেঝেগুলি পরীক্ষা করে রাখার সময় অনুমানের সংখ্যা বাড়িয়ে দিন, কোন অনুমান যে তারা চেক করা হয়েছে এবং প্রতিটি তলায় কতগুলি বিড়াল অবশিষ্ট ছিল। Y বার
পর্যন্ত এটি পুনরাবৃত্তি করুন ।

প্রদত্ত উত্তরটি গণনা করার জন্য এটি অত্যন্ত অযোগ্য কোড তবে তবুও বিড়াল / তল সংখ্যার জন্য দরকারী।

পাইথন কোড:

def next_step(x, guess):
  next_x = []
  for y in x:
    if y[0] == guess:
      if y[1] != 1:
        next_x.append((guess+1, y[1] - 1))
    next_x.append(y)
    if y[0] == guess:
      next_x.append((guess+1, y[1]))
  return next_x

x = [(1, TOTAL_NUM_CATS)]
current_floor = 1
while len(x) <= TOTAL_NUM_FLOORS:
  x = next_step(x, current_floor)
  current_floor += 1
  print len(x)

2 বিড়ালের জন্য সর্বাধিক তলগুলি যা এক্স অনুমানগুলিতে সনাক্ত করা যায় তা হল:
1, 3, 6, 10, 15, 21, 28 ...

3 বিড়ালের জন্য:
1, 3, 7, 14, 25, 41, 63 ...

4 বিড়ালের জন্য:
1, 3, 7, 15, 30, 56, 98 ...

বিস্তারিত গবেষণা করার পর (বেশিরভাগই মধ্যে টাইপিং সংখ্যার ক্রম জড়িত OEIS ) আমি লক্ষ্য করেছি যে, জন্য সর্বোচ্চ মেঝে এক্স একটি অনুসরণ করে সমন্বয় piecewise প্যাটার্ন।

2 বিড়ালের জন্য:
এন <2: 2 ^ n - 1
n> = 2: সি (এন, 1) + সি (এন, 2)

3 টি বিড়ালের জন্য:
n <3: 2 ^ n - 1
n> = 3: সি (এন, 1) + সি (এন, 2) + সি (এন, 3)

4 বিড়ালের জন্য:
এন <4: 2 ^ n - 1
n> = 4: সি (এন, 1) + সি (এন, 2) + সি (এন, 3) + সি (এন, 4)

প্রয়োজনীয় সংখ্যক ফ্লোর পাস না করা পর্যন্ত আমি এখান থেকে সাধারণ ইনক্রিমেন্টিংয়ের সহজ পদ্ধতির গ্রহণ করেছি।

পাইথন কোড:

def find_smallest(floors, eggs):
  maximum_floors = 0
  n = 0
  while maximum_floors < floors:
    maximum_floors = 0
    n += 1
    if n < eggs:
      maximum_floors = 2**n - 1
    else:
      count = 0
      for x in xrange(1, eggs+1):
        maximum_floors += combination(n, x)
  print n

এটি (100, 2) = 14 এর সঠিক সমাধান দেয়
anyone যে কেউ কম তুচ্ছ কিছু পরীক্ষা করতে চান, তার জন্য এটি (1 000 000, 5) = 43 দেয়।

এটি ও (এন) এ চলে যেখানে n হল সমস্যার উত্তর (আরও বিড়াল আরও ভাল)।
তবে আমি নিশ্চিত যে উচ্চতর স্তরের গণিতের কেউ O (1) তে গণনা করার জন্য টুকরোজ সূত্রগুলি সহজ করতে পারে।


0
O(m*(n^(1/m))) algorithm.

Let 'x' be the maximum number of attempts needed.  

m = 1 => linear => x=n

m = 2:  
Let the floors be split into 'k' partitions. The first cat is thrown at the end of each partition (max 'k' times). 
When it dies, the second cat is used to go up from the beginning of this partition.   
x = k + n/k.   
Minimize x by diff wrt k and setting = 0, to get k = n^(1/2) and x = 2 * n^(1/2).

m = 3:  
x = k + 2*(y^(1/2)), where y = n/k  
diff wrt x and set = 0, to get k = n^(1/3) and x = 3 * n^(1/3)

for general m:  
x = m * n^(1/m). 

-1

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


1
আমি মনে করি যে প্রশ্নটি সবচেয়ে খারাপতম মামলার জন্য জিজ্ঞাসা করছে, তাই যত ততক্ষণ প্রতিটি তল সম্ভব ততক্ষণ বিতরণ অপ্রাসঙ্গিক।
স্টিভ জেসপ

-1

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


FWIW এটি একটি ছদ্মবেশিত বাস্তব জীবনের সমস্যা হতে পারে real মনে করুন যে আপনার একটি স্বয়ংক্রিয় পরীক্ষা আছে যা 1234 সংস্করণে ব্যর্থ হয়েছে তবে 42 সংস্করণে কাজ করেছে The বিড়ালটি 1234 এ মারা গেছে তবে সংস্করণ 42 এ লাইভ করে What কোন পুনর্বিবেচনাটি এটি হত্যা করেছিল? উদাহরণস্বরূপ, যদি 42 থেকে 43 অবধি আপডেট করা দ্রুত এবং সহজ তবে চেক আউট করা এবং একটি নতুন সংস্করণ পুনর্নির্মাণ করা শক্ত, এটি বিড়াল সমস্যার মতো দেখতে অনেকটা দেখতে শুরু করে।
এমসিডোওয়েলা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.