আমি যেখানে উত্পাদন সফ্টওয়্যারটিতে সাধারণত একটি ডেক ব্যবহার করব?


21

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



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

1
@ ডিএক্সএম: একটি এসটিএল ডীক এখনও একটি ডাবল-এন্ড সারিতে রয়েছে এবং প্রান্তে (বাস্তবায়নের উপর নির্ভর করে) দ্রুত অপারেশন সরবরাহ করে। এটি মধ্যম অ্যাক্সেসের পাশাপাশি এটির প্রাথমিক ক্রিয়াকে কম সারি-মতো তৈরি করে না।
gbjbaanb

@gbjbaanb: আমি শুধু বলছি আপনি যদি 3 ক্লাসের পাবলিক ইন্টারফেসের দিকে লক্ষ্য করেন: std :: ভেক্টর, STD :: তালিকা (বা std :: সারি) এবং std :: deque, আপনি দেখতে পাবেন যে std :: ভেক্টর এবং std :: deque এর অভিন্ন পাবলিক ইন্টারফেস এবং অভিন্ন ক্ষমতা (স্ট্যান্ড :: ডেকের বৃহত্তর মেমরির পদক্ষেপের ব্যয়ে কিছুটা নমনীয়)। অন্যদিকে std :: list এবং std :: সারি যথাক্রমে তাদের সিএস কাউন্টার-পার্টস, লিংকড-লিস্ট এবং সারিগুলির মতো আচরণ করে। সিএস deque! =
স্টাড

- আমি এই উত্তর দ্বারা shiv.mymail আরো ব্যবহারিক এটি stackoverflow.com/questions/3880254/...
roottraveller

উত্তর:


21

কোনও বার্তাটি ব্যবহার করার একটি উপায় হ'ল "বয়স" আইটেমগুলি। এটি সাধারণত পূর্ববর্তী বা ইতিহাস বৈশিষ্ট্য হিসাবে ব্যবহৃত হয়। একটি নতুন ক্রিয়াটি queুকিয়ে দেওয়া হয়েছে। পুরানো আইটেমগুলি সামনে রয়েছে। নতুন আইটেম (োকানো হওয়ায় (প্রাচীনতম আইটেমগুলি বৃদ্ধিতে) ডেকের আকারের একটি সীমা সামনের আইটেমগুলিকে কিছু সময়ে সরিয়ে ফেলতে বাধ্য করে। এটি পরে কাঠামোর উভয় প্রান্তে অ্যাক্সেসের একটি দ্রুততর উপায় সরবরাহ করে কারণ আপনি তাত্ক্ষণিকভাবে প্রাচীনতম এবং সর্বাধিক সর্বাধিক নতুন আইটেমগুলি সম্মুখ সরিয়ে ফেলতে এবং ও (1) এর প্রাচীনতম ক্রিয়া করতে বা ও (1) সময়ে পূর্বাবস্থায় ফিরুন know


আমি মনে করি না যে এখানে ডীকগুলি ব্যবহার / প্রয়োজন আছে। একটি সাধারণ (সম্ভবত আকার-সীমাবদ্ধ) স্ট্যাক যথেষ্ট।
কনরাড রুডল্ফ

2
@ কনরাড কীভাবে আপনি সাধারণ স্ট্যাকের আইটেমগুলিতে বয়স করেন? (অর্থাত্ "অতি পুরানো" কমান্ডগুলি আপনি কীভাবে সরিয়ে ফেলবেন?)
অ্যান্ড্রেস এফ

@AndresF। বয়স কি স্ট্যাকের আকারের চেয়ে আলাদা? যদি তা হয় তবে আমি এই ডেটা কাঠামোর কথাটি কখনও শুনিনি। অন্যথায় এটি কেবল স্থির আকারের একটি স্ট্যাক যা ডেকের শর্তে প্রয়োগ করা যেতে পারে , বা সহজ-সরল ডেটা স্ট্রাকচারকে স্থির আকারের স্ট্যাক বলে পোস্ট করে।
কনরাড রুডল্ফ

সুতরাং deques হয় সব পরে দরকারী;) কখনও, একটি নির্দিষ্ট আকার স্ট্যাক শুনে (অর্থে আপনি কি বলতে চান প্রাচীনতম আইটেমটি সরানোর)। এটি বোধগম্য হয় তবে এটি সাধারণত "স্ট্যাক" বলতে বোঝায় না, এবং এটি আসলে সহজ কিনা তা এখনও দেখার মতো নয় :)
আন্দ্রেস এফ

এটি মূল প্রশ্নের মন্তব্যে পোস্ট করা হয়েছিল: en.wikedia.org/wiki/Double-end_queue এটি কেবল একটি ডাবল শেষ সারি। আমি এটি উপরে প্রয়োগের পদ্ধতিতে বাস্তবে ব্যবহার করেছি (যে কারণে আমি এটি পোস্ট করেছি)। সত্যিকারের স্ট্যাকে, আপনার কেবলমাত্র অপারেশনগুলি হ'ল ধাক্কা, পপ, শীর্ষ এবং উঁকি দেওয়া (আমরা অন্যকে তর্ক করতে পারি, তবে এটি সাধারণত এটি হয়)। স্ট্যাকের নীচে কী আছে বা নীচে কীভাবে অ্যাক্সেস করবেন তা সম্পর্কে আপনার কোনও জ্ঞান থাকা উচিত নয়। একটি "স্থির আকারের স্ট্যাক"-এ আপনি পুরানো আইটেমগুলি পূরণ করার পরিবর্তে কেবল স্ট্যাকের ওভারফ্লো উত্পাদন করবেন।
জেএমকিউ

1

দুর্দান্ত প্রশ্ন। ডাবল-এন্ড সারির জন্য একক অ্যাপ্লিকেশন উল্লেখ করে আমাদের সিএস 102 কোর্সটি মনে করতে পারি না।

আজ অবধি, আমি জানি কেবলমাত্র অ্যাপ্লিকেশন হ'ল উইকিপিডিয়া নিবন্ধে উল্লিখিত ওয়ার্ক-স্টিলিং শিডিয়ুলার ।

এটি নিম্নলিখিত হিসাবে প্রয়োজনীয়ভাবে কাজ করে:

একটি সাধারণ, একক থ্রেডযুক্ত পদ্ধতিগত মডেলটিতে, প্রতিটি ফাংশন কল তথাকথিত কল স্ট্যাকের একটি অ্যাক্টিভেশন রেকর্ড ঠেলে দেয় । একটি অ্যাক্টিভেশন রেকর্ডে স্থানীয় কল এবং সেই কলটির পরামিতি থাকে meters একবারে পদ্ধতিতে কলটি শেষ হয়ে গেলে ("রিটার্ন"), শেষ সক্রিয়করণ রেকর্ডটি কল স্ট্যাক থেকে পপ করা হয়।

এটি বিশেষত গুরুত্বপূর্ণ কারণ যেভাবে পুনরাবৃত্তি কার্যকর করা হয়: কল স্ট্যাকের বর্তমান অবস্থায় পুনরাবৃত্তির কাঠামো উপস্থাপন করা হয়।

পুনরাবৃত্তির অ্যালগরিদমের সমান্তরাল করার সময় আমরা কল স্টোরকে কল কাতারে প্রতিস্থাপন করে এই সম্পত্তিটি কাজে লাগাতে পারি। গণনার প্রতিটি থ্রেড নিজস্ব কল সারি পায় এবং ক্রমানুসারে কার্যকর করার মতো সক্রিয়করণ রেকর্ড পুশ করে এবং পপ করে।

তবে একবার কোনও থ্রেডের কাজ শেষ হয়ে গেলে (= এটির কল সারিটি খালি), এটি "থ্রেড" প্রান্ত থেকে সরিয়ে সেই থ্রেডের কল সারি থেকে একটি অ্যাক্টিভেশন রেকর্ড সরিয়ে অন্য থ্রেড থেকে কাজ চুরি করে।

মূলত, কল সারি দুটি কল স্ট্যাক হিসাবে কাজ করে যা এখন দুটি থ্রেড সরবরাহ করে।


আপনি এই জন্য একটি উৎস আছে? আকর্ষণীয় মনে হচ্ছে।
kyjelly90210

1
@ রিচার্ড ১৯8787 উইকিপিডিয়া নিবন্ধটি মূল কাগজটি উদ্ধৃত করেছে। বেশ কয়েকটি বাস্তবায়ন বিদ্যমান, যেমন GNU c ++ stdlib সমান্তরাল প্রসারিত কাজ-চুরি বাস্তবায়নের ক্ষেত্রে (তবে কোডটি পড়তে ভয়ঙ্কর) বা সাধারণীকরণের বিভাজনের একটি সমান্তরাল বাস্তবায়ন এবং সত্যই আপনার দ্বারা বিজয় করা হয় (তবে পরবর্তীটি একটি অত্যন্ত অলঙ্কৃত প্রোগ্রামিং স্টাইল ব্যবহার করে বিশেষ করে পাঠাগারটিতে এবং এটি পড়ার পক্ষে কঠোর)
কনরাড রুডল্ফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.