গাছের সমস্যা হিসাবে এটি নিয়ে ভাবনা একটি লাল-হেরিং, এটি সত্যিই একটি নির্দেশিত গ্রাফ। তবে সব ভুলে যাও।
উপরের নীচের যে কোনও জায়গায় একটি কাঁচের কথা ভাবেন। এটির উপরে এক বা দুটি চশমা থাকবে যা এতে প্রবাহিত হতে পারে। সমন্বিত সিস্টেমের যথাযথ পছন্দ সহ (চিন্তা করবেন না, শেষটি দেখুন) যে কোনও গ্লাসের জন্য "পিতামাতা" চশমা পেতে আমরা একটি ফাংশন লিখতে পারি।
We গ্লাস থেকে অতিরিক্ত প্রবাহ নির্বিশেষে আমরা একটি গ্লাসে liquidেলে তরল পরিমাণ পাওয়ার জন্য একটি অ্যালগরিদম সম্পর্কে ভাবতে পারি। উত্তরটি অবশ্য প্রতিটি তাত্ক্ষণিক গ্লাসে সঞ্চিত পরিমাণকে প্রতিটি পিতামাতার বিয়োগে অনেক তরল pouredালা হয় 2 দিয়ে বিভক্ত Just এটি একটি পরিমাণ_পোলা_ইন্টো () ফাংশনটির দেহের অজগর টুকরো হিসাবে লেখা:
# p is coords of the current glass
amount_in = 0
for pp in parents(p):
amount_in += max((amount_poured_into(total, pp) - 1.0)/2, 0)
সর্বাধিক () হ'ল নিশ্চিত করা যায় যে আমরা নেতিবাচক পরিমাণের ওভারফ্লো পেতে পারি না।
আমরা প্রায় শেষ! পৃষ্ঠার নিচে 'y' দিয়ে আমরা একটি সমন্বয় ব্যবস্থা নির্বাচন করি, প্রথম সারির চশমাটি 0 হয়, দ্বিতীয় সারিটি 1 হয় ইত্যাদি ' +1, তৃতীয় সারি -2, 0, +2 এবং আরও। গুরুত্বপূর্ণ বিষয়টি হ'ল স্তর y এর বাম বা ডান-সর্বাধিক গ্লাসে অ্যাবস (এক্স) = y থাকবে।
অজগর (২.x) এ সমস্ত কিছু মোড়ানো, আমাদের কাছে রয়েছে:
def parents(p):
"""Get parents of glass at p"""
(x, y) = p
py = y - 1 # parent y
ppx = x + 1 # right parent x
pmx = x - 1 # left parent x
if abs(ppx) > py:
return ((pmx,py),)
if abs(pmx) > py:
return ((ppx,py),)
return ((pmx,py), (ppx,py))
def amount_poured_into(total, p):
"""Amount of fluid poured into glass 'p'"""
(x, y) = p
if y == 0: # ie, is this the top glass?
return total
amount_in = 0
for pp in parents(p):
amount_in += max((amount_poured_into(total, pp) - 1.0)/2, 0)
return amount_in
def amount_in(total, p):
"""Amount of fluid left in glass p"""
return min(amount_poured_into(total, p), 1)
সুতরাং পিতে একটি গ্লাসে পরিমাণটি পেতে, পরিমাণ_ইন (মোট, পি) ব্যবহার করুন।
এটি ওপি থেকে পরিষ্কার নয়, তবে "আপনি প্যারামিটারগুলি যুক্ত করতে পারবেন না" সম্পর্কে কিছুটা বোঝাতে চাইলে বোঝানো কাচের সংখ্যার ক্ষেত্রে মূল প্রশ্নের উত্তর দিতে হবে । এটি উপরে ব্যবহৃত অভ্যন্তরীণ স্থানাঙ্ক সিস্টেমে শো গ্লাস নম্বরগুলি থেকে ম্যাপিং ফাংশন লিখে সমাধান করা হয়। এটি বেআইনীভাবে, তবে একটি পুনরাবৃত্ত বা গাণিতিক সমাধান ব্যবহার করা যেতে পারে। পুনরাবৃত্তি ফাংশন বুঝতে একটি সহজ:
def p_from_n(n):
"""Get internal coords from glass 'number'"""
for (y, width) in enumerate(xrange(1, n+1)):
if n > width:
n -= width
else:
x = -y + 2*(n-1)
return (x, y)
এখন কেবল একটি গ্লাস নম্বর গ্রহণ করতে উপরের পরিমাণ_ই () ফাংশনটি পুনরায় লিখুন:
def amount_in(total, n):
"""Amount of fluid left in glass number n"""
p = p_from_n(n)
return min(amount_poured_into(total, p), 1)