আপনি কী রঙে আছেন তা ট্র্যাক রাখতে স্ট্যাক ব্যবহার করে বাম থেকে ডানে চলুন। একটি বিচ্ছিন্ন মানচিত্রের পরিবর্তে, আপনার ডেটাসেটে 10 নম্বরটি ব্রেক-পয়েন্ট হিসাবে ব্যবহার করুন।
খালি স্ট্যাক দিয়ে শুরু করা এবং start
0 এ সেট করা, শেষ না হওয়া অবধি লুপ করুন:
- যদি স্ট্যাকটি খালি থাকে:
- প্রথম রঙটি শুরু বা পরে শুরু করার জন্য সন্ধান করুন
start
এবং এটি এবং সমস্ত নিম্ন-স্তরের রঙের স্ট্যাকের দিকে ধাক্কা দিন। আপনার সমতল তালিকাতে, রঙটির শুরু চিহ্নিত করুন।
- অন্যথায় (খালি না হলে):
- পরবর্তী বা পরে যে কোনও উচ্চ-র্যাঙ্কযুক্ত রঙের জন্য পরবর্তী সূচনা বিন্দুটি
start
সন্ধান করুন এবং বর্তমান রঙের শেষটি সন্ধান করুন
- যদি পরবর্তী রঙটি প্রথমে শুরু হয় তবে স্ট্যাকের দিকে যাওয়ার পথে এটি এবং অন্য কোনও কিছুকে চাপ দিন। এটির শুরু হিসাবে বর্তমান রঙের শেষ আপডেট করুন এবং সমতল তালিকায় এই রঙের শুরুটি যুক্ত করুন।
- যদি কোনওটি না থাকে এবং বর্তমান রঙটি প্রথমে
start
শেষ হয় তবে এই রঙের শেষের দিকে সেট করুন , এটিকে স্ট্যাকের বাইরে রেখে পপ করুন এবং পরবর্তী সর্বোচ্চ র্যাঙ্কিংয়ের রঙটি পরীক্ষা করুন
- যদি
start
পরবর্তী রঙের সীমার মধ্যে থাকে তবে শুরু করে সমতল তালিকাটিতে এই রঙটি যুক্ত করুন start
।
- স্ট্যাকটি খালি হয়ে গেলে, কেবল লুপটি চালিয়ে যান (প্রথম বুলেট পয়েন্টে ফিরে যান)।
আপনার উদাহরণের ডেটা দেওয়া এটি একটি মানসিকভাবে পরিচালিত হয়:
# Initial data.
flattened = []
stack = []
start = 0
# Stack is empty. Look for the next starting point at 0 or later: "b", 0 - Push it and all lower levels onto stack
flattened = [ (b, 0, ?) ]
stack = [ r, b ]
start = 0
# End of "b" is 5.4, next higher-colored start is "g" at 2 - Delimit and continue
flattened = [ (b, 0, 2), (g, 2, ?) ]
stack = [ r, b, g ]
start = 2
# End of "g" is 12, next higher-colored start is "y" at 3.5 - Delimit and continue
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, ?) ]
stack = [ r, b, g, y ]
start = 3.5
# End of "y" is 6.7, next higher-colored start is "o" at 6.7 - Delimit and continue
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, ?) ]
stack = [ r, b, g, y, o ]
start = 6.7
# End of "o" is 10, and there is nothing starting at 12 or later in a higher color. Next off stack, "y", has already ended. Next off stack, "g", has not ended. Delimit and continue.
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, 10), (g, 10, ?) ]
stack = [ r, b, g ]
start = 10
# End of "g" is 12, there is nothing starting at 12 or later in a higher color. Next off stack, "b", is out of range (already ended). Next off stack, "r", is out of range (not started). Mark end of current color:
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, 10), (g, 10, 12) ]
stack = []
start = 12
# Stack is empty. Look for the next starting point at 12 or later: "r", 12.5 - Push onto stack
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, 10), (g, 10, 12), (r, 12.5, ?) ]
stack = [ r ]
start = 12
# End of "r" is 13.8, and there is nothing starting at 12 or higher in a higher color. Mark end and pop off stack.
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, 10), (g, 10, 12), (r, 12.5, 13.8) ]
stack = []
start = 13.8
# Stack is empty and nothing is past 13.8 - We're done.