ও (1) পুশ / পপ সময় সহ তিনটি স্ট্যাক কি এক অ্যারে প্রয়োগ করা যেতে পারে?


9

একটি স্থির আকারের অ্যারে ব্যবহার করে দুটি স্ট্যাক দক্ষতার সাথে প্রয়োগ করা যেতে পারে: স্ট্যাক # 1 বাম প্রান্ত থেকে শুরু হয়ে ডানদিকে বৃদ্ধি পায় এবং স্ট্যাক # 2 ডান প্রান্ত থেকে শুরু হয়ে বাম দিকে বৃদ্ধি পায়। তিনটি স্ট্যাকের জন্য কি একই রকম?

আরও সুনির্দিষ্টভাবে, নিম্নলিখিত শর্তাবলী দ্বারা তিনটি স্ট্যাক প্রয়োগ করা সম্ভব:

  1. আপনার কাছে একটি নির্দিষ্ট আকারের অ্যারে রয়েছে যা এন অবজেক্টগুলিকে ধরে রাখতে পারে।
  2. তিনটি স্ট্যাকের আকারের যোগফল যতক্ষণ না <এন হয়, চাপ () ব্যর্থ হওয়া উচিত নয় should
  3. উভয় পুশ () এবং পপ () অপারেশনগুলিতে ও (1) সময় নিতে হবে।
  4. অ্যারে ছাড়াও, আপনি কেবল ও (1) অতিরিক্ত স্থান ব্যবহার করতে পারেন।

এখানে সমাধান যে কি উদাহরণ না এই প্রয়োজনীয়তা সন্তুষ্ট:

  • অ্যারেটিকে 3 টি নির্দিষ্ট অংশে বিভক্ত করা এবং প্রতিটি অংশ স্ট্যাকের জন্য ব্যবহার করা (2 লঙ্ঘন করে)।
  • উপরের মত তবে স্ট্যাকের মধ্যে অস্থাবর সীমানা (3 লঙ্ঘন করে)।
  • সরল সংযুক্ত-তালিকা ভিত্তিক বাস্তবায়ন (4 লঙ্ঘন করে)।

আমি অ-তুচ্ছ অ্যালগরিদম বা অসম্ভবতা প্রমাণ গ্রহণ করব যদিও তারা সমস্ত শর্ত পূরণ না করে (1) - (4) উদাহরণস্বরূপ, এমন একটি অ্যালগরিদম যেখানে ধাক্কা / পপ O (1) মোড়িত সময় নেয়, বা যেখানে অতিরিক্ত মেমরি ও (এন) এর চেয়ে ছোট, যেমন ও (লগ এন)। বা একটি অসম্ভবতা প্রমাণ যা দেখায় যে উদাহরণস্বরূপ, প্রতি পুশ / পপ প্রতি অ্যারের 5 টিরও কম উপাদান অ্যাক্সেস করা অসম্ভব।


1
আপনি যদি এটিকে প্রয়োজনীয় 4 এর লঙ্ঘন হিসাবে বিবেচনা করেন তবে আমি জানি না, তবে আপনার এন অবজেক্ট অ্যারেতে প্রতিটি "অবজেক্ট" যদি একটি পূর্ণসংখ্য সূচকের মতো একটি অতিরিক্ত ক্ষেত্র অন্তর্ভুক্ত করতে পারে তবে আপনি আপনার অ্যারের ভিতরে "লিঙ্কযুক্ত তালিকাগুলি" প্রয়োগ করতে পারেন । আপনি 3 টি বহিরাগত ভেরিয়েবল ব্যবহার করে 3 টি স্ট্যাকের শীর্ষের সূচকটি ধরে রাখতে পারেন এবং প্রতিটি "অবজেক্ট" এটি পূর্ববর্তী উপাদানটিকে এটির স্ট্যাকটি নির্দেশ করতে পারে।
আভি তাল

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

1
আপনি প্রথমে পুশ ক্রিয়াকলাপগুলি বিবেচনা করুন এবং তারপরে কেবল পপ অপারেশন করবেন Consider সমস্যার এই সংস্করণ সম্পর্কে কিছু জানা আছে? N
দিমিত্রি আরবানউইচজ

চান অতিরিক্ত স্থান আপনাকে সন্তুষ্ট? O(N)
দিমিত্রি আরবানউইচজ

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

উত্তর:


6

ফ্রেডম্যান এবং গোল্ডস্মিথ "থ্রি স্ট্যাকস" (জার্নাল অফ অ্যালগোরিদম, 1994) এ দেখিয়েছিলেন যে নষ্ট স্থানের বিট অর্জনযোগ্য। এটি আকারের অ্যারেগুলির জন্য ন্যূনতম 16 কোয়াটোয়ার্ডিলিয়ন মিলিয়ন ইয়োটাবাইট প্রয়োজন needed আমি একটি সহজ অ্যালগরিদম নাশক বর্ণনা শব্দ আপনার স্থান এই প্রশ্নের আমার Stackoverflow উত্তর । @ দিমিত্রি-শহুরেউইকজ যেমন মন্তব্যে উল্লিখিত হয়েছে, এটি মূলত কেবল অ্যারেটিকে size আকারের ব্লকগুলি হিসাবে বিবেচনা করছে q , যেখানে প্রতিটি ব্লক হুবহু একটি স্ট্যাকের জন্য ব্যবহৃত হয় এবং পরের ব্লকের একক পয়েন্টার থাকে যে স্ট্যাক মধ্যে।Θ(এনε)Θ(এন) এনএন


0

N এর অন্তর্নিহিত অ্যারের দৈর্ঘ্য হোক। আমি বড় অংশগুলির লিঙ্কযুক্ত তালিকা হিসাবে স্ট্যাকগুলি কল্পনা করতে পারি, যাতে সামগ্রিক অংশগুলি ও (লগ 2 (এন)) এর চেয়ে বেশি না থাকে। এন / 2 এর সূচীতে প্রথম দুটিয়ের মধ্যে তৃতীয় স্ট্যাক রাখুন। সুতরাং আমরা 3 দখল অঞ্চল এবং 2 বিনামূল্যে আছে। যখন কোনও স্ট্যাক পরবর্তী উপাদান গ্রহণ করতে পারে না, এর অর্থ একটি মুক্ত অঞ্চল নিঃশেষ হয়ে যায়। অন্যটি যদি খুব ক্লান্ত হয়ে যায় তবে পুরো স্মৃতিটি অবসন্ন হয়। অন্যথায়, এন / 2 এর চেয়ে বেশি আকারের আর একটি মুক্ত অঞ্চল রয়েছে। সেই মুক্ত অঞ্চলে উপচে পড়া স্ট্যাকটি চালিয়ে যান। যাতে পুরো কনফিগারেশনটি স্ট্যাকের প্রাথমিক বিন্যাসের অনুরূপ। যেহেতু ফ্রি মেমরি এখন প্রাথমিকের অর্ধেকের বেশি নয়, সুতরাং এই জাতীয় সংযোগকারী ক্রিয়াকলাপগুলির লগ 2 (এন) এর চেয়ে বেশি আর কিছু থাকবে না। প্রতিটি লিঙ্কিং অপারেশনের স্ট্যাকের পূর্বের অবস্থাটি সংরক্ষণ করতে নির্দিষ্ট পরিমাণ মেমরির প্রয়োজন। সুতরাং,


1
আপনি কীভাবে মেমরিটিকে পুনর্ব্যবহার করবেন?
এমিল জেব্যাক

ভাল প্রশ্ন. দ্রুত উত্তরটি হ'ল খণ্ডটি যা ফ্রি হয়ে যায় তার স্মৃতিটি ফ্রি এরিয়াতে ফিরিয়ে দেয় যেখানে এটি আগে নেওয়া হয়েছিল। তবে কী যদি সেই অংশটির জন্য বরাদ্দ মেমরির সময় থেকে মুক্ত অঞ্চলটি সঙ্কুচিত হয়ে যায়, এবং অংশটি এখন এর সাথে সংলগ্ন না হয়? এটি নিখরচায় মেমরির বিভাজন ঘটায়, সেখানে 2 টিরও বেশি মুক্ত অঞ্চল থাকতে পারে যা আমার সমস্ত নির্মাণ ধ্বংস করে দেয়।
আলেক্সি কাইগোরডভ

পপিং এখানে প্রকৃতপক্ষে সমস্যা, তবে দিমিত্রি মন্তব্যগুলিতে যে সমস্যার কথা জিজ্ঞাসা করেছিলেন তার সংস্করণটির জন্য আলেক্সির নির্মাণ একটি দুর্দান্ত উপরের গণ্ডী সরবরাহ করে: যদি আমাদের সকল ধাক্কা সমস্ত পপসের আগেই ঘটে থাকে তবে কী হবে? আমি ভাবছি যে ও (লগ এন) এর চেয়ে ভাল আর কিছু সম্ভব কিনা এই ক্ষেত্রে।
ব্যবহারকারী 1020406
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.