এই দুটির মধ্যে পার্থক্য কী? আমি বলতে চাচ্ছি পদ্ধতিগুলি সব একই রকম। সুতরাং, কোনও ব্যবহারকারীর জন্য, তারা অভিন্নভাবে কাজ করে।
এটা কি ঠিক??
উত্তর:
(তারিখযুক্ত তবে এখনও খুব দরকারী) থেকে এসজিআই এসটিএল এর সংক্ষিপ্তসার deque
:
একটি ডেকি অনেকটা ভেক্টরের মতো: ভেক্টরের মতো এটি একটি ক্রম যা ক্রমের শেষে উপাদানগুলিতে এলোমেলো অ্যাক্সেস, ধ্রুবক সময় সন্নিবেশ এবং উপাদানগুলিকে অপসারণ এবং লিনিয়ার সময় সন্নিবেশ এবং মাঝখানে উপাদানগুলি অপসারণকে সমর্থন করে।
ডেকটি ভেক্টর থেকে পৃথক হওয়ার প্রধান উপায় হ'ল ডেকটি ক্রমের শুরুতে ধ্রুবক সময় সন্নিবেশ এবং উপাদানগুলি অপসারণকে সমর্থন করে। তদ্ব্যতীত, ডেকের ভেক্টরের সক্ষমতা () এবং রিজার্ভ () এর সাথে সদৃশ কোনও সদস্যের কার্যকারিতা নেই এবং সেই সদস্য ফাংশনগুলির সাথে সম্পর্কিত যে পুনরাবৃত্তকারী বৈধতার উপর কোনও গ্যারান্টি সরবরাহ করে না।
এখানে list
একই সাইট থেকে সংক্ষিপ্তসারটি দেওয়া হয়েছে :
একটি তালিকা দ্বিগুণ সংযুক্ত তালিকা। এটি হ'ল এটি একটি সিকোয়েন্স যা সামনের বা শেষের দিকে বা মাঝখানে উভয়কে সামনের দিকে এবং পিছনের ট্র্যাভারসালকে সমর্থন করে এবং (amorised) ধ্রুবক সময় সন্নিবেশ এবং উপাদানগুলি অপসারণ করে। তালিকাগুলিতে গুরুত্বপূর্ণ সম্পত্তি রয়েছে যা সন্নিবেশ এবং বিভক্তকরণগুলি উপাদানগুলির তালিকার জন্য পুনরাবৃত্তিকে অকার্যকর করে না এবং এমনকি অপসারণটি কেবল পুনরাবৃত্তিকেই অবৈধ করে দেয় যা সরানো উপাদানগুলিকে নির্দেশ করে। পুনরাবৃত্তির ক্রম পরিবর্তন করা যেতে পারে (অর্থাৎ তালিকা :: তালিকার আগে তালিকার ক্রিয়াকলাপের পরে পুনরাবৃত্তির আলাদা পূর্বসূরি বা উত্তরসূরি থাকতে পারে) তবে পুনরুক্তিকারীরা নিজেরাই অবৈধ বা অকার্যকর হবে না যদি না সেই অবৈধতা না ঘটে বা রূপান্তর স্পষ্ট হয়।
সংক্ষেপে ধারকগুলিতে ভাগ করে নেওয়া রুটিন থাকতে পারে তবে সেই রুটিনগুলির জন্য সময় গ্যারান্টির ধারক থেকে ধারক থেকে পৃথক । এই পাত্রে কোনটি কোন কাজের জন্য ব্যবহার করবেন তা বিবেচনা করার সময় এটি অত্যন্ত গুরুত্বপূর্ণ: কনটেইনারটি কীভাবে প্রায়শই ব্যবহার করা হবে তা বিবেচনায় নেওয়া (উদাহরণস্বরূপ, সন্নিবেশ / মোছার চেয়ে অনুসন্ধানের জন্য আরও বেশি) আপনাকে ডান পাত্রে ডাইরেক্ট করতে অনেক দীর্ঘ পথ যেতে পারে ।
আমি পার্থক্যগুলি তালিকাবদ্ধ করবো:
জটিলতা
Insert/erase at the beginning in middle at the end
Deque: Amortized constant Linear Amortized constant
List: Constant Constant Constant
constant
এবং এর মধ্যে পার্থক্য কী amortized constant
?
std::list
মূলত দ্বিগুণ সংযুক্ত তালিকা।
std::deque
অন্যদিকে, আরও কার্যকর করা হয় std::vector
। সূচক অনুসারে এর অবিচ্ছিন্ন অ্যাক্সেসের সময় রয়েছে পাশাপাশি শুরুর দিকে এবং শেষে সন্নিবেশ এবং অপসারণ রয়েছে যা তালিকার চেয়ে নাটকীয়ভাবে বিভিন্ন পারফরম্যান্স বৈশিষ্ট্য সরবরাহ করে।
আরেকটি গুরুত্বপূর্ণ গ্যারান্টি হ'ল প্রতিটি ভিন্ন ধারক যেভাবে তার ডেটা মেমরিতে সঞ্চয় করে:
নোট করুন যে ডেকটি তাদের নিজস্ব ত্রুটিগুলি ছাড়াই ভেক্টর এবং তালিকা উভয়ের সুবিধার ভারসাম্য বজায় রাখার চেষ্টা করার জন্য ডিজাইন করা হয়েছিল । এটি মেমরি সীমিত প্ল্যাটফর্মগুলির একটি বিশেষ আকর্ষণীয় ধারক, উদাহরণস্বরূপ, মাইক্রোকন্ট্রোলার।
মেমরি স্টোরেজ কৌশলটি প্রায়শই উপেক্ষা করা হয়, তবে, নির্দিষ্ট অ্যাপ্লিকেশনটির জন্য সবচেয়ে উপযুক্ত ধারক নির্বাচন করা এটি প্রায়শই অন্যতম গুরুত্বপূর্ণ কারণ।
নং একটি ডীক কেবল ও (1) সামনের এবং পিছনে সন্নিবেশ এবং মোছা সমর্থন করে। এটি, উদাহরণস্বরূপ, মোড়কের চারপাশে একটি ভেক্টরে প্রয়োগ করা যেতে পারে। যেহেতু এটি ও (1) এলোমেলো অ্যাক্সেসের গ্যারান্টিযুক্ত তাই আপনি নিশ্চিত হতে পারেন যে এটি দ্বিগুণ সংযুক্ত তালিকাটি ব্যবহার করছে না (জাস্ট)।
পারফরম্যান্স পার্থক্য অন্যদের দ্বারা ভাল ব্যাখ্যা করা হয়েছে। আমি কেবল যুক্ত করতে চেয়েছিলাম যে অনুরূপ বা এমনকি অভিন্ন ইন্টারফেসগুলি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে প্রচলিত - অবজেক্ট-ওরিয়েন্টেড সফ্টওয়্যার লেখার সাধারণ পদ্ধতির অংশ। আপনার কোনওভাবেই ধরে নেওয়া উচিত নয় যে দুটি ক্লাস একইভাবে একইভাবে কাজ করে কারণ তারা একই ইন্টারফেসটি বাস্তবায়িত করে, আপনার চেয়ে আরও বেশি ধারণা করা উচিত যে একটি ঘোড়া কুকুরের মতো কাজ করে কারণ তারা উভয়ই আক্রমণ () এবং মেকিং_নাইজ () প্রয়োগ করে।
এখানে তালিকার একটি প্রুফ অফ কনসেপ্ট কোড ব্যবহার রয়েছে, নিরক্ষিত মানচিত্র যা ও (1) চেহারা এবং ও (1) সঠিক এলআরইউ রক্ষণাবেক্ষণ দেয়। মুছে ফেলা অপারেশন থেকে বাঁচতে (অ-মোছা) পুনরাবৃত্তির প্রয়োজন। জিপিইউ মেমরির সিপিইউ পয়েন্টারগুলির জন্য নির্বিচারে বড় সফ্টওয়্যার পরিচালিত ক্যাশে একটি ও (1) এ ব্যবহার করার পরিকল্পনা করুন। লিনাক্স ও (1) শিডিয়ুলারকে নোডস (LRU <-> প্রতিটি প্রসেসরে রান সারি)। আনর্ডারড_ম্যাপের হ্যাশ টেবিলের মাধ্যমে অবিচ্ছিন্ন সময় অ্যাক্সেস রয়েছে।
#include <iostream>
#include <list>
#include <unordered_map>
using namespace std;
struct MapEntry {
list<uint64_t>::iterator LRU_entry;
uint64_t CpuPtr;
};
typedef unordered_map<uint64_t,MapEntry> Table;
typedef list<uint64_t> FIFO;
FIFO LRU; // LRU list at a given priority
Table DeviceBuffer; // Table of device buffers
void Print(void){
for (FIFO::iterator l = LRU.begin(); l != LRU.end(); l++) {
std::cout<< "LRU entry "<< *l << " : " ;
std::cout<< "Buffer entry "<< DeviceBuffer[*l].CpuPtr <<endl;
}
}
int main()
{
LRU.push_back(0);
LRU.push_back(1);
LRU.push_back(2);
LRU.push_back(3);
LRU.push_back(4);
for (FIFO::iterator i = LRU.begin(); i != LRU.end(); i++) {
MapEntry ME = { i, *i};
DeviceBuffer[*i] = ME;
}
std::cout<< "************ Initial set of CpuPtrs" <<endl;
Print();
{
// Suppose evict an entry - find it via "key - memory address uin64_t" and remove from
// cache "tag" table AND LRU list with O(1) operations
uint64_t key=2;
LRU.erase(DeviceBuffer[2].LRU_entry);
DeviceBuffer.erase(2);
}
std::cout<< "************ Remove item 2 " <<endl;
Print();
{
// Insert a new allocation in both tag table, and LRU ordering wiith O(1) operations
uint64_t key=9;
LRU.push_front(key);
MapEntry ME = { LRU.begin(), key };
DeviceBuffer[key]=ME;
}
std::cout<< "************ Add item 9 " <<endl;
Print();
std::cout << "Victim "<<LRU.back()<<endl;
}
মধ্যে deque
এবং মধ্যে বিশিষ্ট পার্থক্যlist
এর জন্য deque
:
পাশাপাশি পাশাপাশি রাখা পণ্য;
দুই পক্ষ (সামনে, পিছনে) থেকে ডাতাস যুক্ত করার জন্য অনুকূলিত;
সংখ্যার (পূর্ণসংখ্যা) দ্বারা সূচিযুক্ত উপাদানগুলি।
পুনরাবৃত্তি এবং এমনকি উপাদান সূচক দ্বারা ব্রাউজ করা যেতে পারে।
ডেটাতে সময় অ্যাক্সেস দ্রুত হয়।
জন্য list
আইটেমগুলি "এলোমেলোভাবে" স্মৃতিতে সঞ্চিত;
কেবল পুনরুক্তিকারীদের দ্বারা ব্রাউজ করা যেতে পারে;
মাঝখানে সন্নিবেশ এবং অপসারণের জন্য অনুকূলিত।
ডেটাতে অ্যাক্সেস সময় অ্যাক্সেস ধীর, পুনরাবৃত্তি থেকে ধীর, খুব খারাপ স্থানিক স্থানীয়তার কারণে।
খুব ভাল বড় উপাদান পরিচালনা করে
আপনি নিম্নলিখিত লিঙ্কটিও পরীক্ষা করতে পারেন , যা দুটি এসটিএল ধারক (স্টাড :: ভেক্টর সহ) এর মধ্যে পারফরম্যান্সের তুলনা করে
আশা করি আমি কিছু দরকারী তথ্য শেয়ার করেছি।