তিনটি স্ট্যাক সহ একটি সারি কীভাবে প্রয়োগ করবেন?


136

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

তিনটি স্ট্যাকের সাথে সারি। তিনটি স্ট্যাক সহ একটি সারি প্রয়োগ করুন যাতে প্রতিটি সারি অপারেশন একটি ধ্রুবক (সবচেয়ে খারাপ ক্ষেত্রে) স্ট্যাক ক্রিয়াকলাপ গ্রহণ করে। সতর্কতা: উচ্চ মাত্রার অসুবিধা।

আমি জানি কীভাবে 2 টি স্ট্যাক দিয়ে একটি সারি তৈরি করতে হয় তবে 3 টি স্ট্যাকের সাহায্যে আমি সমাধানটি খুঁজে পাচ্ছি না। কোন ধারণা ?

(ওহ এবং, এটি হোমওয়ার্ক নয় :))


30
আমি অনুমান করি এটি হ্যানয়ের বৈকল্পিকের একটি টাওয়ার
গম্বো

14
@ জেসন: এই প্রশ্নটি সদৃশ নয়, কারণ এটি ও (1) মোড়িত সময়ের জন্য জিজ্ঞাসা করে যখন এইটি প্রতিটি ক্রিয়াকলাপের জন্য ও (1) সবচেয়ে খারাপ ক্ষেত্রে জিজ্ঞাসা করে। ডুওএসআরএক্সের দ্বি-স্ট্যাক দ্রবণটি ইতিমধ্যে ও (1) প্রতিটি ক্রিয়াকলাপের মুহুর্তের সময়।
ইন্টারজয়

15
"সতর্কতা: উচ্চ মাত্রার অসুবিধা" বলার সময় লেখক নিশ্চিতভাবে মজা করছেন না।
BoltClock

9
@ গম্বো দুর্ভাগ্যক্রমে হ্যানয়ের টাওয়ারের সময় জটিলতা স্থির সময়ের কাছাকাছি কোথাও নেই!
প্রসওয়ান

12
দ্রষ্টব্য: পাঠ্যের প্রশ্নটি এতে আপডেট হয়েছে: স্থির সংখ্যক স্ট্যাকের সাথে একটি সারি প্রয়োগ করুন ["3" নয়] যাতে প্রতিটি সারি ক্রিয়াকলাপ একটি ধ্রুবক (সবচেয়ে খারাপ ক্ষেত্রে) স্ট্যাক ক্রিয়াকলাপ গ্রহণ করে। সতর্কতা: উচ্চ মাত্রার অসুবিধা। ( algs4.cs.princeton.edu/13stacks - বিভাগ 1.3.43)। দেখা যাচ্ছে যে অধ্যাপক সেডজউইক মূল চ্যালেঞ্জ স্বীকার করেছেন।
মার্ক পিটারস

উত্তর:


44

সারসংক্ষেপ

  • ও (1) অ্যালগরিদম 6 স্ট্যাকের জন্য পরিচিত
  • ও (1) অ্যালগরিদম 3 টি স্ট্যাকের জন্য পরিচিত, তবে অলস মূল্যায়ন ব্যবহার করে যা বাস্তবে অতিরিক্ত অভ্যন্তরীণ ডাটা স্ট্রাকচারের সাথে মিল রাখে, তাই এটি কোনও সমাধান গঠন করে না
  • সেডজউইকের কাছের লোকেরা নিশ্চিত করেছেন যে তারা মূল প্রশ্নের সমস্ত সীমাবদ্ধতার মধ্যে 3-স্ট্যাক সমাধান সম্পর্কে অবগত নন

বিশদ বিবরণ

এই লিঙ্কটির পিছনে দুটি বাস্তবায়ন রয়েছে: http://www.eecs.usma.edu/webs/people/okasaki/jfp95/index.html

এর মধ্যে একটি হ'ল (1) তিনটি স্ট্যাকের সাথে তবে এটি অলস কার্যকারিতা ব্যবহার করে, যা অনুশীলনে অতিরিক্ত মধ্যবর্তী ডেটা স্ট্রাকচার (ক্লোজার) তৈরি করে।

এর মধ্যে অন্যটি হ'ল ও (1) তবে এসআইএক্স স্ট্যাক ব্যবহার করে। তবে এটি অলস মৃত্যুদণ্ড কার্যকর না করেই কাজ করে।

আপডেট: ওকাসাকির কাগজটি এখানে রয়েছে: http://www.eecs.usma.edu/webs/people/okasaki/jfp95.ps এবং মনে হচ্ছে যে তিনি আসলে ও (1) সংস্করণটির জন্য কেবল 2 টি স্ট্যাক ব্যবহার করেন যার অলস মূল্যায়ন রয়েছে। সমস্যাটি হ'ল এটি সত্যই অলস মূল্যায়নের উপর ভিত্তি করে। প্রশ্নটি যদি অলস মূল্যায়ন ছাড়াই 3-স্ট্যাক অ্যালগরিদমে অনুবাদ করা যায়।

আপডেট: আরেকটি সম্পর্কিত অ্যালগরিদম হ্যাপার পিটারসেনের কাগজ "স্ট্যাকস বনাম ডেকস" -তে বর্ণনা করা হয়েছে, কম্পিউটার এবং সংযুক্তি সম্পর্কিত 7 তম বার্ষিক সম্মেলনে প্রকাশিত। আপনি নিবন্ধটি গুগল বই থেকে সন্ধান করতে পারেন। 225-226 পৃষ্ঠা দেখুন। তবে অ্যালগরিদম আসলে রিয়েল-টাইম সিমুলেশন নয়, এটি তিনটি স্ট্যাকের ডাবল-এন্ড সারির লিনিয়ার-টাইম সিমুলেশন।

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


আমি কেবল আপনার লিঙ্কে থাকা কাগজপত্র এবং প্রোগ্রামগুলির উপরে উড়ে এসেছি। তবে আমি যদি সঠিকভাবে দেখি তবে তারা স্ট্যাক ব্যবহার করে না, তারা তালিকাগুলিকে মৌলিক ধরণ হিসাবে ব্যবহার করে। এবং এসএসপি। এই তালিকাগুলিতে শিরোনাম এবং বিশ্রাম দিয়ে নির্মিত হয়, তাই এটি মূলত আমার সমাধানের সাথে একইরকম দেখাচ্ছে (এবং আমি মনে করি সঠিক নয়)।
ফ্লোলো

1
হাই, বাস্তবায়নগুলি কার্যকরী ভাষায় রয়েছে যেখানে পয়েন্টারগুলি ভাগ না করা পর্যন্ত তালিকাগুলি স্ট্যাকের সাথে সমান হয় এবং সেগুলি হয় না; ছয়-স্ট্যাক সংস্করণটি ছয় "প্লেইন" স্ট্যাক ব্যবহার করে সত্যই প্রয়োগ করা যেতে পারে। দুটি / তিনটি স্ট্যাক সংস্করণে সমস্যা হ'ল এটি লুকানো ডেটা স্ট্রাকচার (ক্লোজার) ব্যবহার করে।
আন্তি হুমা

আপনি কি নিশ্চিত যে ছয়-স্ট্যাক সমাধানটি পয়েন্টারগুলি ভাগ করে না? ইন rotate, এটা দেখে মনে হচ্ছে frontতালিকা উভয় নির্ধারিত পরার oldfrontএবং f, এবং এই তারপর আলাদাভাবে পরিবর্তিত হয়।
ইন্টারজয়

14
Algs4.cs.princeton.edu/13stacks এর উত্স উপাদানটি পরিবর্তন করা হয়েছে: 43. একটি স্থির সংখ্যার ["3" নয়] স্ট্যাকের সাথে একটি সারি প্রয়োগ করুন যাতে প্রতিটি সারি ক্রিয়াকলাপ একটি ধ্রুবক (সবচেয়ে খারাপ ক্ষেত্রে) স্ট্যাকের সংখ্যা নেয় অপারেশন। সতর্কতা: উচ্চ মাত্রার অসুবিধা। চ্যালেঞ্জটির শিরোনাম এখনও "তিনটি স্ট্যাক সহ ক্যু" বলছে :-)।
মার্ক পিটারস

3
@ আন্টিহুইমা ছয়-স্ট্যাকের লিঙ্কটি মারা গেছে, আপনি কি জানেন যে এটি কোথাও উপস্থিত রয়েছে?
কোয়ান্টিন প্রদেট

12

ঠিক আছে, এটি সত্যিই শক্ত, এবং একমাত্র আমি যে সমাধানটি সামনে আসতে পেরেছি তা আমাকে মনে করেছে কোবায়শি মারু পরীক্ষার কার্কস সমাধানের (কোনওভাবে প্রতারণা): ধারণাটি হ'ল আমরা স্ট্যাকের স্ট্যাক ব্যবহার করি (এবং এটি একটি তালিকা মডেল করার জন্য ব্যবহার করি) )। আমি অপারেশনগুলিকে en / dequeue এবং পুশ এবং পপ বলি, তারপরে আমরা পাই:

queue.new() : Stack1 = Stack.new(<Stack>);  
              Stack2 = Stack1;  

enqueue(element): Stack3 = Stack.new(<TypeOf(element)>); 
                  Stack3.push(element); 
                  Stack2.push(Stack3);
                  Stack3 = Stack.new(<Stack>);
                  Stack2.push(Stack3);
                  Stack2 = Stack3;                       

dequeue(): Stack3 = Stack1.pop(); 
           Stack1 = Stack1.pop();
           dequeue() = Stack1.pop()
           Stack1 = Stack3;

isEmtpy(): Stack1.isEmpty();

(স্ট্যাকএক্স = স্ট্যাকওয়াই বিষয়বস্তুগুলির অনুলিপি নয়, কেবলমাত্র রেফারেন্সের একটি অনুলিপি Its এটি কেবল সহজ বর্ণনা করার জন্য 3 আপনি 3 টি স্ট্যাকের একটি অ্যারেও ব্যবহার করতে পারেন এবং সূচীর মাধ্যমে এগুলি অ্যাক্সেস করতে পারেন, সেখানে আপনি কেবল সূচক ভেরিয়েবলের মান পরিবর্তন করতে পারবেন )। স্ট্যাক-অপারেশন-পদগুলিতে সমস্ত কিছুই ও (1) এ রয়েছে।

এবং হ্যাঁ আমি এটির তর্কযোগ্য জানি, কারণ আমাদের কাছে 3 টিরও বেশি স্ট্যাক রয়েছে তবে সম্ভবত এটি আপনার অন্যদের ভাল ধারণা দেয়।

সম্পাদনা: ব্যাখ্যা উদাহরণ:

 | | | |3| | | |
 | | | |_| | | |
 | | |_____| | |
 | |         | |
 | |   |2|   | |
 | |   |_|   | |
 | |_________| |
 |             |
 |     |1|     |
 |     |_|     |
 |_____________|

স্ট্যাক 1 প্রদর্শন করার জন্য আমি এখানে কিছুটা ASCII- আর্ট দিয়ে চেষ্টা করেছি।

প্রতিটি উপাদান একটি একক উপাদান স্ট্যাকের মধ্যে আবৃত থাকে (সুতরাং আমাদের কাছে কেবল স্ট্যাকের টাইপসেইফ স্ট্যাক রয়েছে)।

আপনি সরানোর জন্য দেখুন আমরা প্রথমে প্রথম উপাদানটি পপ করব (এখানে উপাদান 1 এবং 2 রয়েছে এমন স্ট্যাক)। তারপরে পরবর্তী উপাদানটি পপ করুন এবং সেখানে ১ টি আন-আপ করুন wards এর পরে আমরা বলব যে প্রথম পপ করা স্ট্যাক এখন আমাদের নতুন স্ট্যাক 1। আরও কিছু কার্যক্ষম বলার জন্য - এগুলি হল 2 উপাদানগুলির স্ট্যাকের মাধ্যমে কার্যকর করা তালিকা যেখানে শীর্ষ উপাদানটি সিডিআর এবং প্রথম / নীচের শীর্ষে উপাদানটি গাড়ি । অন্য 2 জন স্ট্যাকগুলি সহায়তা করছে।

এসপি কৌশলটি সন্নিবেশ করা হয়, কারণ আপনাকে অন্য কোনও উপাদান যুক্ত করতে নেস্টেড স্ট্যাকের গভীরে ডুব দিতে হবে। স্ট্যাক 2 কেন আছে তা জানায়। স্ট্যাক 2 সর্বদা অভ্যন্তরীণ স্ট্যাক। যোগ করার পরে কেবলমাত্র একটি উপাদানকে চাপ দেওয়া এবং তারপরে একটি নতুন স্ট্যাক 2 উপরের দিকে চাপ দেওয়া হয় (এবং আমাদের ডিক্যু অপারেশনে কেন স্ট্যাক 2 স্পর্শ করতে দেওয়া হয় না তা হ'ল)।


আপনি কীভাবে এটি কাজ করে তা বোঝানোর যত্ন নেবেন? সম্ভবত 'এ', 'বি', 'সি', 'ডি' এবং তারপরে 4 বার ধাক্কার খুঁজে বের করুন?
, MAK

1
@ আইসমান: স্ট্যাক 2 সঠিক নয়। এগুলি হারিয়ে যায় না, কারণ স্ট্যাক সর্বদা স্ট্যাক 1 এর অন্তঃস্থল স্ট্যাককে বোঝায় তাই তারা এখনও স্ট্যাক 1 এ অন্তর্নিহিত।
ফ্লোলো

3
আমি সম্মত হই যে এটি প্রতারণা করছে :-)। এটি 3 স্ট্যাক নয়, এটি 3 স্ট্যাক রেফারেন্স। তবে একটি উপভোগ্য পঠন।
মার্ক পিটারস

1
এটি একটি চতুর স্কিম, তবে আমি যদি এটি সঠিকভাবে বুঝতে পারি, সারি যখন এন উপাদান রয়েছে তখন এটি n স্ট্যাকের প্রয়োজন হবে। প্রশ্নটি 3 টি স্ট্যাকের জন্য জিজ্ঞাসা করে।
, MAK

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

4

আমি এটি প্রমাণ করতে চেষ্টা করতে যাচ্ছি যে এটি করা যাচ্ছে না।


মনে করুন যে একটি সারি Q আছে যা 3 টি স্ট্যাক, এ, বি এবং সি দ্বারা সিমুলেটেড হয়

গবেষকেরা

  • ASRT0: = তদুপরি, ধরে নিও যে Q ও (1) এ ক্রিয়াকলাপগুলি {সারি, ডিকুই sim সিমুলেট করতে পারে। এর অর্থ হ'ল প্রতিটি সারি / ডিক্যু অপারেশন সিমুলেট করার জন্য স্ট্যাক পুশ / পপগুলির একটি নির্দিষ্ট ক্রম বিদ্যমান exists

  • সাধারণতার ক্ষতি ছাড়াই, ধরে নিন যে সারি ক্রিয়াকলাপগুলি নির্বিচারক।

কিউতে সারিবদ্ধ উপাদানগুলিকে তাদের ক্যুয়ের ক্রমের উপর ভিত্তি করে 1, 2, ... সংখ্যাযুক্ত করা উচিত, প্রথম উপাদানটি যে Q তে সারিবদ্ধ করা হয়েছে তাকে 1, দ্বিতীয়টি 2 হিসাবে সংজ্ঞায়িত করা হবে ইত্যাদি।

নির্ধারণ করা

  • Q(0) := Q- তে 0 টি উপাদান থাকা অবস্থায় Q (এবং এভাবে A, B এবং C তে 0 উপাদান থাকে)
  • Q(1) := 1 সারি ক্রিয়াকলাপের পরে কিউ (এবং এ, বি এবং সি) এর রাজ্য Q(0)
  • Q(n) := কিউ (এবং এ, বি এবং সি) এর রাজ্যের উপর n সারির ক্রিয়াকলাপ চলছে Q(0)

নির্ধারণ করা

  • |Q(n)| :=উপাদানগুলির সংখ্যা Q(n)(অতএব |Q(n)| = n)
  • A(n) := স্ট্যাকের রাষ্ট্র এ যখন কিউ এর রাজ্য হয় Q(n)
  • |A(n)| := উপাদান সংখ্যা A(n)

এবং স্ট্যাক বি এবং সি এর জন্য অনুরূপ সংজ্ঞা

trivially,

|Q(n)| = |A(n)| + |B(n)| + |C(n)|

---

|Q(n)| স্পষ্টতই এন উপর আনবাউন্ডেড।

অতএব, কমপক্ষে একটি |A(n)|, |B(n)|বা |C(n)|এন থেকে সীমাহীন।

WLOG1, ধরুন স্ট্যাক এ আনবাউন্ডেড এবং স্ট্যাকগুলি বি এবং সি সীমাবদ্ধ।

* B_u :=বি * এর C_u :=উপরের সীমানা সি * এর উপরের একটি সীমানা নির্ধারণ করুনK := B_u + C_u + 1

WLOG2, এমন কোনও এনের জন্য |A(n)| > K, কে উপাদানগুলি নির্বাচন করুন Q(n)। মনে করুন যে elements উপাদানগুলির মধ্যে 1 রয়েছে A(n + x), সকলের জন্য x >= 0, যেমন উপাদানটি সর্বদা স্ট্যাক এ থাকে যতই সারি অপারেশন করা হোক না কেন।

  • X := যে উপাদান

তারপরে আমরা সংজ্ঞা দিতে পারি

  • Abv(n) :=স্ট্যাকের আইটেমের সংখ্যা A(n)যা এক্স এর উপরে
  • Blo(n) :=A(n)X এর নীচে স্ট্যাকের উপাদানগুলির সংখ্যা

    | এ (ঢ) | = Abv (n) + ব্লু (এন)

ASRT1 :=X টি থেকে বের করার জন্য প্রয়োজনীয় পপ সংখ্যা Q(n)কমপক্ষেAbv(n)

( ASRT0) এবং ( ASRT1) থেকে, ASRT2 := Abv(n)আবদ্ধ হতে হবে।

যদি Abv(n)আনবাউন্ডড হয়, তবে যদি 20 টি ডীকু X এর থেকে ডি চিহ্নিত করতে হয় তবে Q(n)এটির জন্য কমপক্ষে Abv(n)/20পপগুলি লাগবে । যা সীমাহীন। 20 যে কোনও ধ্রুবক হতে পারে।

অতএব,

ASRT3 := Blo(n) = |A(n)| - Abv(n)

আনবাউন্ড করা আবশ্যক।


WLOG3, আমরা নীচের অংশ থেকে কে উপাদানগুলি নির্বাচন করতে পারি এবং সেগুলির A(n)মধ্যে একটি সবার A(n + x)জন্য রয়েছেx >= 0

X(n) := যে উপাদান, কোনও প্রদত্ত এন

ASRT4 := Abv(n) >= |A(n)| - K

যখনই কোনও উপাদানকে সারিবদ্ধ করা হয় Q(n)...

WLOG4, ধরুন বি এবং সি ইতিমধ্যে তাদের উপরের সীমানায় পূর্ণ হয়ে গেছে। মনে করুন উপরের উপাদানগুলির জন্য উপরের সীমাটি X(n)পৌঁছে গেছে। তারপরে, একটি নতুন উপাদান এ প্রবেশ করে A.

WLOG5, ধরুন ফলস্বরূপ, নতুন উপাদানটি অবশ্যই নীচে প্রবেশ করা উচিত X(n)

ASRT5 := নীচে একটি উপাদান রাখার জন্য প্রয়োজনীয় পপ সংখ্যা X(n) >= Abv(X(n))

থেকে (ASRT4), Abv(n)এন উপর আনবাউন্ডেড হয়।

অতএব, নীচে একটি উপাদান রাখার জন্য প্রয়োজনীয় পপ সংখ্যা X(n)আনবাউন্ডেড নয়।


এটি বিপরীতে ASRT1, সুতরাং, O(1)3 টি স্ট্যাকের সাথে একটি সারি অনুকরণ করা সম্ভব নয় ।


অর্থাত

কমপক্ষে 1 স্ট্যাক আনবাউন্ড করা আবশ্যক।

সেই স্ট্যাকটিতে থাকা কোনও উপাদানের জন্য, এটির উপরে উপাদানগুলির সংখ্যা অবশ্যই সীমাবদ্ধ করা উচিত, বা সেই উপাদানটি সরিয়ে ফেলতে শিরোনাম ক্রিয়াকলাপ সীমাহীন হবে।

যাইহোক, যদি এটির উপরে উপাদানগুলির সংখ্যা সীমিত হয়, তবে এটি একটি সীমাতে পৌঁছে যাবে। কিছু সময়ে, তার নীচে একটি নতুন উপাদান প্রবেশ করতে হবে।

যেহেতু আমরা সর্বদা সেই স্ট্যাকের সর্বনিম্ন কয়েকটি উপাদানগুলির মধ্যে একটি থেকে পুরানো উপাদানটি বেছে নিতে পারি, সুতরাং এটির উপরে একটি আনবাউন্ড সংখ্যক উপাদান থাকতে পারে (আনবাউন্ডেড স্ট্যাকের আনবাউন্ডেড আকারের উপর ভিত্তি করে)।

এটির নীচে একটি নতুন উপাদান প্রবেশ করতে, যেহেতু এটির উপরে সীমাহীন সংখ্যক উপাদান রয়েছে, তাই নতুন উপাদানটিকে নীচে রাখার জন্য একটি আনবাউন্ড নম্বর পপ প্রয়োজন।

এবং এইভাবে দ্বন্দ্ব।


এখানে 5 টি ডাব্লুএলওজি (সাধারণের ক্ষতি ছাড়াই) বিবৃতি রয়েছে। কিছুটা অর্থে, এগুলি স্বজ্ঞাতভাবে সত্য বলে বোঝা যায় (তবে তাদের বয়স যখন 5, এটি কিছুটা সময় নিতে পারে)। কোনও সাধারণত্ব নষ্ট না হওয়ার আনুষ্ঠানিক প্রমাণ প্রাপ্ত করা যেতে পারে তবে এটি অত্যন্ত দীর্ঘ। এগুলি বাদ দেওয়া হয়েছে।

আমি স্বীকার করি যে এই জাতীয় বাদ দেওয়া ডাব্লুএলওজি বিবৃতিটিকে প্রশ্নবিদ্ধ রেখে দিতে পারে। বাগগুলির জন্য কোনও প্রোগ্রামারের প্যারানিয়া দিয়ে, দয়া করে ডাব্লুএলওজি বিবৃতি যাচাই করুন।

তৃতীয় স্ট্যাকটিও অপ্রাসঙ্গিক। কী গুরুত্বপূর্ণ তা হল সীমিত স্ট্যাকের সেট এবং আনবাউন্ডেড স্ট্যাকের একটি সেট। উদাহরণের জন্য সর্বনিম্ন প্রয়োজনীয় 2 স্ট্যাক। স্ট্যাকের সংখ্যা অবশ্যই সসীম হতে হবে।

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


2
আমি মনে করি যে প্রমাণগুলি সেই অনুমানগুলির জন্য কাজ করে - তবে আমি নিশ্চিত নই যে সারিটি খালি ফাঁকা হওয়ার জন্য সমস্ত স্ট্যাক খালি থাকতে হবে, বা স্ট্যাকের আকারের সমষ্টি অবশ্যই সারির আকারের সমান হবে।
মাইকিব

3
"ডাব্লুএলজিজি 1, ধরুন স্ট্যাক এ আনবাউন্ডেড এবং স্ট্যাকগুলি বি এবং সি সীমাবদ্ধ।" আপনি ধরে নিতে পারবেন না যে কয়েকটি স্ট্যাক সীমাবদ্ধ, এটি তাদের অকেজো করে দেবে (এগুলি ও (1) অতিরিক্ত স্টোরেজ হিসাবে একই হবে)।
ইন্টারজয়

3
কখনও কখনও তুচ্ছ জিনিসগুলি তুচ্ছ হয় না: | প্রশ্ন | = | এ | + | বি | + | সি | কেবলমাত্র সঠিক, যদি আপনি ধরে নেন যে প্রশ্নে প্রতিটি প্রবেশের জন্য আপনি ঠিক A, B বা C তে যুক্ত করেন তবে এটি এমনও হতে পারে যে কিছুটা অ্যালগরিদম হয়, যা সর্বদা একটি উপাদান দুটি বার দুটি স্ট্যাক বা এমনকি তিনটি জুড়ে। এবং যদি এটি এইভাবে কাজ করে তবে আপনি ডাব্লুএলজি 1 টি আর ধরে রাখেন না (যেমন সি এর কপির একটি কপি কল্পনা করুন (এটি কোনও অর্থবোধ করে না, তবে সম্ভবত কোনও অ্যালগরিদম রয়েছে, আলাদা অর্ডার বা যা কিছু আছে ...)
ফ্লোলো

@ ফ্ল্লো এবং @ মিকিব: আপনারা দুজনেই ঠিক আছেন। | প্রশ্ন (ঢ) | | এ (এন) | + | বি (এন) | + | সি (এন) | হিসাবে সংজ্ঞায়িত করা উচিত। এবং তারপরে | প্রশ্ন (এন) | > = এন। পরবর্তীকালে, প্রমাণটি n এর সাথে কাজ করবে এবং নোট করুন যে যতক্ষণ | প্রশ্ন (এন) | বৃহত্তর, উপসংহার প্রযোজ্য।
ডিংফেং কুইক

@ ইনটারজে: আপনার কাছে 3 আনবাউন্ডেড স্ট্যাক এবং কোনও সীমাবদ্ধ স্ট্যাক থাকতে পারে। তারপরে "বি_ইউ + সি_ইউ + ১" এর পরিবর্তে প্রমাণটি কেবল "1" ব্যবহার করতে পারে। মূলত, অভিব্যক্তিটি "বাউন্ডেড স্ট্যাকগুলিতে উপরের সীমানা + 1 এর সমষ্টি" উপস্থাপন করে, সুতরাং সীমানা স্ট্যাকের সংখ্যা কোনও ব্যাপার না।
ডিংফেং কুইক

3

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

@ অ্যান্টি.হুইমা: লিঙ্কযুক্ত তালিকাগুলি স্ট্যাকের মতো নয়।

  • s1 = (1 2 3 4) --- 4 টি নোডের সাথে একটি লিঙ্কযুক্ত তালিকা, প্রতিটি ডানদিকে একটিকে নির্দেশ করে এবং 1, 2, 3 এবং 4 মান ধারণ করে

  • এস 2 = পপড (এস 1) --- এস 2 এখন (2 3 4)

এই মুহুর্তে, এস 2 পপড (এস 1) এর সমতুল্য, যা স্ট্যাকের মতো আচরণ করে। তবে, এস 1 এখনও রেফারেন্সের জন্য উপলব্ধ!

  • এস 3 = পপড (পপড (এস 1)) --- এস 3 হ'ল (3 4)

আমরা এখনও 1 পেতে এস 1 এ উঁকি দিতে পারি, যেখানে সঠিক স্ট্যাক প্রয়োগে, উপাদান 1 এস 1 থেকে চলে গেছে!

এটার মানে কি?

  • s1 হ'ল স্ট্যাকের শীর্ষের রেফারেন্স
  • s2 হ'ল স্ট্যাকের দ্বিতীয় উপাদানটির রেফারেন্স
  • s3 তৃতীয় রেফারেন্স হয় ...

অতিরিক্ত তৈরি লিঙ্ক-তালিকাগুলি এখন প্রতিটি রেফারেন্স / পয়েন্টার হিসাবে কাজ করে! একটি সীমাবদ্ধ সংখ্যক স্ট্যাক এটি করতে পারে না।

আমি কাগজপত্র / কোডে যা দেখছি তার থেকে, অ্যালগোরিদমগুলি রেফারেন্স ধরে রাখতে সংযুক্ত-তালিকার এই সম্পত্তিটি ব্যবহার করে।

সম্পাদনা করুন: আমি কেবলমাত্র 2 এবং 3 টি লিঙ্কযুক্ত তালিকার অ্যালগোরিদমগুলিকে উল্লেখ করছি যা সংযুক্ত তালিকাগুলির এই সম্পত্তিটি ব্যবহার করে, কারণ আমি তাদের প্রথম পড়ি (তারা সহজ দেখায়)। এগুলি বোঝানোর জন্য নয় যে সেগুলি প্রযোজ্য বা প্রযোজ্য নয়, কেবল এটি ব্যাখ্যা করার জন্য যে লিঙ্কযুক্ত তালিকাগুলি অগত্যা অভিন্ন নয়। আমি যখন ফ্রি থাকি তখন আমি 6 দিয়ে পড়তে পারি। @ ওয়েলবোগ: সংশোধন করার জন্য ধন্যবাদ।


অলসতা একইভাবে পয়েন্টার-কার্যকারিতাও অনুকরণ করতে পারে।


সংযুক্ত-তালিকা ব্যবহার করা একটি পৃথক সমস্যা সমাধান করে। এই কৌশলটি লিস্পে রিয়েল-টাইম সারিগুলি প্রয়োগ করতে ব্যবহার করা যেতে পারে (বা কমপক্ষে লিস্পস যা লিঙ্কযুক্ত-তালিকা থেকে সমস্ত কিছু তৈরিতে জোর দেয়): "বিশুদ্ধ লিস্পে রিয়েল টাইম ক্যু অপারেশনস" (অ্যান্টি.হুইমার লিঙ্কগুলির মাধ্যমে সংযুক্ত) দেখুন। অপারেশন সময় এবং ভাগ (অপরিবর্তনীয়) কাঠামোর সাথে অপরিবর্তনীয় তালিকা ডিজাইনের একটি দুর্দান্ত উপায়।


1
অ্যান্টির উত্তরে আমি অন্যান্য অ্যালগরিদমগুলির সাথে কথা বলতে পারি না, তবে ছয়-স্ট্যাক ধ্রুবক সময় সমাধান ( eecs.usma.edu/webs/people/okasaki/jfp95/queue.hm.sml ) তালিকার এই সম্পত্তিটি ব্যবহার করে না , যেমন আমি জাভাতে java.util.Stackঅবজেক্ট ব্যবহার করে এটি পুনরায় প্রয়োগ করেছি । এই বৈশিষ্ট্যটি কেবলমাত্র যেখানে ব্যবহার করা হয় তা হ'ল একটি অপ্টিমাইজেশন যা স্থায়ী সময়ে স্থায়ী স্ট্যাকগুলি "নকল" করতে দেয়, যা জাভা স্ট্যাকগুলি বেস করতে পারে না (তবে যা জাভাতে প্রয়োগ করা যেতে পারে) যেহেতু তারা পারস্পরিক পরিবর্তনযোগ্য কাঠামো।
ওয়েলবোগ

যদি এটি এমন একটি অপ্টিমাইজেশন যা গণনা সংক্রান্ত জটিলতা হ্রাস করে না তবে এটি উপসংহারে প্রভাব ফেলবে না। অবশেষে এটি যাচাই করার জন্য একটি সমাধান পেয়ে খুশি: তবে আমি এসএমএল পড়া পছন্দ করি না। আপনার জাভা কোড ভাগ করে নিচ্ছেন? (:
ডিংফেং কুইক

দুর্ভাগ্যক্রমে এটি তিনটির পরিবর্তে ছয়টি স্ট্যাক ব্যবহার করে এটি চূড়ান্ত সমাধান নয়। তবে, এটি প্রমাণ করা সম্ভব যে ছয়টি স্ট্যাক একটি ন্যূনতম সমাধান ...
ওয়েলবোগ

@Welbog! আপনি কি আপনার 6-স্ট্যাক বাস্তবায়ন ভাগ করতে পারেন? :) এটি দেখতে দুর্দান্ত লাগবে :)
আন্তি হুমা

1

আপনি দুটি স্ট্যাক সহ ধীরে ধীরে ধীরে ধীরে এটি করতে পারেন:

------------- --------------
            | |
------------- --------------

যোগ করা হচ্ছে O(1)এবং অপসারণ হ'ল O(1)যদি আপনি যে দিকটি নিতে চান তা খালি না O(n)হয়ে অন্যথায় (অন্য স্ট্যাকটিকে দুটি ভাগে বিভক্ত করুন)।

কৌশলটি দেখতে হবে যে O(n)অপারেশনটি প্রতিবারই করা হবে O(n)(যদি আপনি বিভক্ত হন, যেমন অর্ধে)। সুতরাং, একটি অপারেশন জন্য গড় সময় হয় O(1)+O(n)/O(n) = O(1)

এটি কোনও সমস্যার মতোই শিখতে পারে, আপনি যদি অ্যারে ভিত্তিক স্ট্যাক (দ্রুততম) দিয়ে একটি অত্যাবশ্যকীয় ভাষা ব্যবহার করছেন তবে আপনি যেভাবেই কেবলমাত্র ধীরে ধীরে ধীরে ধীরে সময় কাটাতে চলেছেন।


মূল প্রশ্ন হিসাবে: একটি স্ট্যাক বিভক্ত করতে একটি অতিরিক্ত মধ্যবর্তী স্ট্যাকের প্রয়োজন। আপনার টাস্কটিতে তিনটি স্ট্যাক অন্তর্ভুক্ত থাকার কারণে এটি হতে পারে।
থমাস আহলে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.