কোন অ্যারে / অ্যারে তালিকার উপর একটি লিঙ্কযুক্ত তালিকা কখন ব্যবহার করবেন?


176

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


জাভাতে, অ্যারেলিস্ট এবং লিংকডলিস্ট কনস্ট্রাক্টর ব্যতীত ঠিক একই কোড ব্যবহার করে। আপনার "অ্যারে তালিকা ... লিঙ্কযুক্ত তালিকার চেয়ে সহজে বা সহজে ব্যবহার করা" অর্থবোধ করে না। একটি লিঙ্কযুক্ত তালিকার চেয়ে অ্যারেলিস্ট "সহজ" হওয়ার উদাহরণ সরবরাহ করুন।
এস। লট

2
পাশাপাশি এই চেক করুন, stackoverflow.com/questions/322715/...
NoNaMe


3
এস। লট এটি সত্য নয়। জাভা অ্যারেলিস্ট একটি অ্যারের চারপাশে একটি মোড়ক, এতে কিছু ইউটিলিটি ফাংশন যুক্ত করা হয়। একটি লিঙ্কযুক্ত তালিকা হ'ল স্পষ্টতই একটি লিঙ্কযুক্ত তালিকা। developer.classpath.org/doc/java/util/ArrayList-source.html
kingfrito_5005

উত্তর:


261

লিঙ্কযুক্ত তালিকাগুলি অ্যারেগুলির চেয়ে বেশি ভাল যখন:

  1. আপনার তালিকা থেকে ধ্রুবক সময় সন্নিবেশ / মুছে ফেলা প্রয়োজন (যেমন রিয়েল-টাইম কম্পিউটিংয়ে যেখানে সময়ের পূর্বাভাস একেবারেই সমালোচনা হয়)

  2. তালিকায় কত আইটেম থাকবে তা আপনি জানেন না। অ্যারে সহ, আপনাকে অ্যারে খুব বড় হলে মেমরি পুনরায় ঘোষণা এবং কপি করতে হবে copy

  3. আপনার কোনও উপাদানের এলোমেলো অ্যাক্সেসের দরকার নেই

  4. আপনি তালিকার মাঝখানে আইটেমগুলি সন্নিবেশ করতে সক্ষম হতে চান (যেমন অগ্রাধিকারের সারি)

অ্যারেগুলি যখন পছন্দ হয়:

  1. আপনার উপাদানগুলিতে সূচিযুক্ত / এলোমেলো অ্যাক্সেসের প্রয়োজন

  2. অ্যারের উপাদানগুলির সংখ্যা আপনি সময়ের আগে জানেন যাতে আপনি অ্যারের জন্য সঠিক পরিমাণের মেমরি বরাদ্দ করতে পারেন

  3. ক্রমানুসারে সমস্ত উপাদানগুলির মধ্য দিয়ে পুনরাবৃত্তি করার সময় আপনার গতি দরকার। আপনি প্রতিটি উপাদান অ্যাক্সেস করতে অ্যারেতে পয়েন্টার ম্যাথ ব্যবহার করতে পারেন, যেখানে আপনাকে লিঙ্কযুক্ত তালিকার প্রতিটি উপাদানটির জন্য পয়েন্টারের উপর ভিত্তি করে নোডের সন্ধান করতে হবে, যার ফলে পৃষ্ঠা ত্রুটি হতে পারে যার ফলে কর্মক্ষমতা হিট হতে পারে।

  4. স্মৃতি একটি উদ্বেগ। ভরাট অ্যারে সংযুক্ত তালিকার তুলনায় কম স্মৃতি গ্রহণ করে। অ্যারের প্রতিটি উপাদান কেবলমাত্র ডেটা। প্রতিটি লিঙ্কযুক্ত তালিকার নোডের সাথে সংযুক্ত তালিকার অন্যান্য উপাদানগুলিতে একটি (বা আরও) পয়েন্টার প্রয়োজন হয়।

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


7
শুভ সূচনা, তবে এটি গুরুত্বপূর্ণ জিনিসগুলি ছেড়ে দেয়: কাঠামোগত অংশীদারি সমর্থন করে তালিকাগুলি, অ্যারেগুলি ঘনতর এবং আরও ভাল লোকেশন রয়েছে।
দারিয়াস বেকন

1
ব্যবহারিকভাবে, অ্যারেলিস্ট এবং অ্যারের মধ্যে পারফরম্যান্স পার্থক্য নগণ্য। এটি ধরে নিয়েছে যে আপনি তুলনীয় তুলনা করুন এবং উদাহরণস্বরূপ, আপনি যখন আকারটি আগেই জানবেন, আপনি এটির অ্যারেলিস্টটি বলবেন।
সোভিক

40
যেহেতু লিংকডলিস্টে ও (1) সন্নিবেশ / মুছে ফেলা হয় (যখন আপনি ধ্রুবক সময় সন্নিবেশ / মোছা বলবেন তখন আমি আপনাকে বোঝাতে চাইছি তা কী )? কোনও লিঙ্কযুক্ত তালিকার মাঝখানে জিনিস োকানো সর্বদা ও (এন) হয়
পেসারিয়ার

28
যদি আপনি ইতিমধ্যে সন্নিবেশের অবস্থানে (পুনরুক্তির মাধ্যমে) হয়ে থাকেন তবে লিঙ্কযুক্ত তালিকায় ও (1) সন্নিবেশ রয়েছে ser সবসময় না, যদিও।
আদম

4
অগ্রাধিকার সারিগুলির জন্য লিঙ্কযুক্ত তালিকাগুলি ব্যবহার করা খুব বোকামি ধারণা is গতিশীল অ্যারে-ব্যাকড হ্যাপগুলি ও (এলজি এন) মোড়ক সন্নিবেশ এবং সবচেয়ে খারাপ ক্ষেত্রে লোগারিথমিক মুছা-মিনিটের জন্য অনুমতি দেয় এবং দ্রুততম ব্যবহারিক অগ্রাধিকারের সারি কাঠামোর মধ্যে একটি।
ফ্রেড ফু

54

অ্যারেগুলিতে ও (1) এলোমেলো অ্যাক্সেস রয়েছে তবে এতে স্টাফ যুক্ত করতে বা স্টাফগুলি সরাতে ব্যয়বহুল।

লিঙ্কযুক্ত তালিকাগুলি আইটেম যোগ বা মুছে ফেলার জন্য এবং পুনরাবৃত্তি করতে খুব সস্তা, তবে এলোমেলো অ্যাক্সেস হ'ল ও (এন)।


3
কোনও অ্যারের শেষে থেকে আইটেমগুলি সরিয়ে ফেলা হ'ল বিপরীত সময়, যেমন কোনও লিঙ্কযুক্ত তালিকার উভয় প্রান্ত থেকে আইটেমগুলি সন্নিবেশ করা / সরানো হয় । মাঝখানে ... উভয়ের পক্ষে তেমন কিছু নয়।
জোয়

1
@ জো লিঙ্কড লিস্ট ও (এন) এর শেষে সন্নিবেশ / মুছে ফেলা হচ্ছে না? আপনি যদি ইতিমধ্যে পেনাল্টিমেট লিঙ্কে অবস্থান না করেন তবে শেষ উপাদানটি খুঁজে পেতে আপনার এখনও ও (এন) পদক্ষেপের দরকার আছে, না?
অ্যালেক্স মুর-নিমি

@ অ্যালেক্সমুর-নীমি: এককভাবে সংযুক্ত তালিকার জন্য, হ্যাঁ। তবে অনেকেরই পিছনে এবং পিছনে লিঙ্ক রয়েছে এবং এভাবে উভয় প্রান্তে পয়েন্টার রাখে।
জোয়ি

2
দ্বিগুণ সংযুক্ত তালিকাগুলি থাকা আপনাকে সামনে এবং পিছনে অনুসন্ধান করতে বাধ্য করবে, যদি না আপনার এলএল মানগুলি অর্ডার করে ... এবং এখনও সবচেয়ে খারাপ পরিস্থিতি হ'ল (এন)
সিকিউরকুরভে

"লিঙ্কযুক্ত তালিকাগুলি আইটেম যোগ বা অপসারণ করতে সত্যিই সস্তা এবং পুনরাবৃত্তি করা" সম্পূর্ণ সত্য নয়। যদি আমি কোনও লিঙ্কযুক্ত তালিকার মাঝখানে থাকা কোনও আইটেমটি সরিয়ে নিতে চাই, তবে তালিকার সেই আইটেমটি না পৌঁছানো পর্যন্ত আমাকে শুরু থেকে পুনরাবৃত্তি করতে হবে। এটির O (n / 2) সময় যেখানে তালিকায় n = আইটেমের সংখ্যা। আপনার উত্তর থেকে দেখে মনে হচ্ছে আপনি এটির ধ্রুবক সময় O (1) এর মতো করছেন যা এটি অ্যারেতে রয়েছে in লিঙ্কযুক্ত তালিকার প্রধান / মূল নোড থেকে যোগ / সরানোর ধ্রুব সময় time
ইয়াওয়ার মুর্তজা

22
Algorithm           ArrayList   LinkedList
seek front            O(1)         O(1)
seek back             O(1)         O(1)
seek to index         O(1)         O(N)
insert at front       O(N)         O(1)
insert at back        O(1)         O(1)
insert after an item  O(N)         O(1)

অ্যারেলিস্টগুলি একবারে পড়ার মতো অনেকগুলি বা অ্যাপেন্ডারদের লেখার জন্য ভাল তবে সামনে বা মাঝখানে থেকে অ্যাড / অপসারণ করতে খারাপ।


14

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

অ্যাক্সেসগুলি ক্রমানুসারে থাকলেও অ্যারে তালিকায় উপাদানগুলি অ্যাক্সেস করা কোনও লিঙ্কযুক্ত তালিকার চেয়েও দ্রুত। এর কারণ অ্যারে উপাদানগুলি মঞ্জুরিযুক্ত স্মৃতিতে সংরক্ষণ করা হয় এবং সহজেই ক্যাশে যায়। লিঙ্কযুক্ত তালিকার নোডগুলি সম্ভাব্যভাবে বিভিন্ন বিভিন্ন পৃষ্ঠায় ছড়িয়ে দেওয়া যেতে পারে।

আমি কেবলমাত্র একটি লিঙ্কযুক্ত তালিকা ব্যবহার করার পরামর্শ দিচ্ছি যদি আপনি জানেন যে আপনি স্বেচ্ছাসেবী অবস্থানগুলিতে আইটেমগুলি সন্নিবেশ করানো বা মুছতে চলেছেন। অ্যারে তালিকাগুলি আরও অনেক কিছুর জন্য দ্রুত হবে।


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

7

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

আপনি সঠিক আছেন যে এটি সাধারণত হয় না। আমি এর মতো কয়েকটি খুব সুনির্দিষ্ট কেস পেয়েছি, তবে খুব বেশি নয়।


আপনি যখন মাঝখানে বিবর্তনগুলি করেন তখন আসলে কী ঘটে তা পরিবর্তন করা এবং অ্যারেটিকে পুনরায় আকার দেওয়া হয়। আপনি মোড়করণের গণ্ডিতে আঘাত না করলে আপনাকে কেবল পুনরায় আকার না দিয়ে স্থানান্তরিত করতে হবে।
সিকিউরউরেভ

3

এটি পুনরুক্তি করার সময় আপনি কী ধরণের অপারেশন করছেন তা নির্ভর করে, সমস্ত ডেটা স্ট্রাকচারের সময় এবং মেমরির মধ্যে বাণিজ্য হয় এবং আমাদের প্রয়োজনের উপর নির্ভর করে আমাদের সঠিক ডিএস নির্বাচন করা উচিত। সুতরাং কিছু ক্ষেত্রে রয়েছে যেখানে লিঙ্কডলিস্ট দ্রুততর হয় অ্যারে এবং বিপরীতে। ডেটা স্ট্রাকচারের তিনটি বেসিক অপারেশন বিবেচনা করুন Consider

  • অনুসন্ধানের

যেহেতু অ্যারে সূচক ভিত্তিক ডেটা স্ট্রাকচার সন্ধানের অ্যারে রয়েছে index সুতরাং অ্যারেগুলিতে এলোমেলোভাবে অ্যাক্সেস থাকা অবস্থায় অ্যারেটি লিঙ্কযুক্ত তালিকার দ্রুত হয়।

প্র: তাহলে এর পিছনে কী সৌন্দর্য?

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

  • সন্নিবেশ

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

  • মুছিয়াতা

এটি সন্নিবেশের মতো কাজ করে এবং অ্যারের চেয়ে লিংকডলিস্টে আরও ভাল।


2

সেগুলি সংগ্রহের সর্বাধিক ব্যবহৃত ব্যবহৃত বাস্তবায়ন।

ArrayList:

  • সন্নিবেশ করান / শেষে মুছুন সাধারণত ও (1) নিকৃষ্টতম পরিস্থিতি হে (এন)

  • মাঝের O (n) এ সন্নিবেশ / মুছুন

  • O (1) যে কোনও অবস্থান পুনরুদ্ধার করুন

যোজিত তালিকা:

  • যে কোনও অবস্থানে O (1) সন্নিবেশ / মুছুন (নোটটির কোনও রেফারেন্স থাকলে তা নোট করুন)

  • মাঝের হে (এন) এ পুনরুদ্ধার করুন

  • প্রথম বা শেষ উপাদানটি পুনরুদ্ধার করুন ও (1)

ভেক্টর: এটি ব্যবহার করবেন না। এটি অ্যারেলিস্টের অনুরূপ একটি পুরানো বাস্তবায়ন তবে সমস্ত পদ্ধতি সিঙ্ক্রোনাইজ করে। মাল্টিথ্রেডিং পরিবেশে ভাগ করা তালিকার জন্য এটি সঠিক পদ্ধতি নয়।

হ্যাশ মানচিত্র

ও (1) এ কী দ্বারা সন্নিবেশ / মুছুন / পুনরুদ্ধার করুন

ট্রিসেট O োকান / মুছুন / এতে ও (লগ এন) থাকে

হ্যাশসেট ও (1) এ আকার / সন্নিবেশ / সরিয়ে / সন্নিবেশ করান


1

বাস্তবে মেমরির স্থানীয় অঞ্চলে রিয়েল প্রসেসিংয়ে বিশাল কর্মক্ষমতা থাকে।

"বিগ ডেটা" প্রসেসিং বনাম এলোমেলো অ্যাক্সেসে ডিস্ক স্ট্রিমিংয়ের বর্ধিত ব্যবহার দেখায় যে কীভাবে আপনার অ্যাপ্লিকেশনটির কাঠামোগত গঠন এটি বৃহত আকারে নাটকীয়ভাবে কর্মক্ষমতা উন্নত করতে পারে।

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


0

হুম, অ্যারেলিস্ট এমন পরিস্থিতিতে ব্যবহার করা যেতে পারে যেমনটি আমার অনুমান:

  1. আপনি নিশ্চিত নন যে কতগুলি উপাদান উপস্থিত থাকবে
  2. তবে আপনাকে সূচকের মাধ্যমে এলোমেলোভাবে সমস্ত উপাদান অ্যাক্সেস করতে হবে

উদাহরণস্বরূপ, আপনাকে একটি পরিচিতি তালিকার সমস্ত উপাদান আমদানি করতে এবং অ্যাক্সেস করতে হবে (যার আকারটি আপনার অজানা)


0

অ্যারে ওভার র‌্যাডিক্স বাছাইয়ের জন্য এবং বহুপদী ক্রিয়াকলাপের জন্য লিঙ্কযুক্ত তালিকা ব্যবহার করুন।


0

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

২) সন্ধান (পদ্ধতিটি অর্জন করুন) ক্রিয়াকলাপগুলি অ্যারেলিস্টে (ও (1)) দ্রুত তবে লিঙ্কডলিস্টে নেই (ও (এন)) তাই কম সংযোজন এবং অপারেশনগুলি অপসারণ এবং আরও অনুসন্ধান অপারেশন প্রয়োজনীয়তা থাকলে অ্যারেলিস্ট আপনার সেরা বাজি হতে পারে।


0

আমি মনে করি যে মূলত পার্থক্য হ'ল তালিকার শীর্ষ থেকে আপনার ঘন ঘন জিনিস sertোকানো বা সরাতে হবে কিনা।

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

একটি লিঙ্কযুক্ত তালিকার সাথে এটি ও (1) কারণ আপনার কেবল নোড তৈরি করতে হবে, মাথাটি পুনরায় বরাদ্দ করুন এবং পূর্ববর্তী মাথা হিসাবে পরবর্তীটি রেফারেন্স বরাদ্দ করুন।

তালিকার শেষে ঘন ঘন orোকানো বা অপসারণ করার সময় অ্যারেগুলি পছন্দনীয় কারণ জটিলতা ও (1) হবে, কোনও পুনর্নির্মাণের প্রয়োজন হবে না, তবে একটি লিঙ্কযুক্ত তালিকার জন্য এটি ও (এন) হবে কারণ আপনাকে মাথা থেকে যেতে হবে শেষ নোডে

আমি মনে করি লিঙ্কযুক্ত তালিকার এবং অ্যারেগুলিতে উভয়ই অনুসন্ধান করা হবে (লগ এন) কারণ আপনি সম্ভবত বাইনারি অনুসন্ধান ব্যবহার করবেন।


0

আমি কিছু বেঞ্চমার্কিং করেছি এবং দেখেছি যে তালিকার ক্লাসটি এলোমেলো প্রবেশের জন্য লিংকডলিস্টের চেয়ে আসলে দ্রুত:

using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = 20000;
            Random rand = new Random(12345);

            Stopwatch watch = Stopwatch.StartNew();
            LinkedList<int> ll = new LinkedList<int>();
            ll.AddLast(0);
            for (int i = 1; i < count; i++)
            {
                ll.AddBefore(ll.Find(rand.Next(i)),i);

            }
            Console.WriteLine("LinkedList/Random Add: {0}ms", watch.ElapsedMilliseconds);

            watch = Stopwatch.StartNew();
            List<int> list = new List<int>();
            list.Add(0);
            for (int i = 1; i < count; i++)
            {
                list.Insert(list.IndexOf(rand.Next(i)), i);

            }
            Console.WriteLine("List/Random Add: {0}ms", watch.ElapsedMilliseconds);

            Console.ReadLine();
        }
    }
}

এটি লিঙ্কযুক্ত তালিকার জন্য 900 এমএস এবং তালিকা শ্রেণীর জন্য 100 মিমি লাগে।

এটি পরবর্তী সংখ্যার তালিকা তৈরি করে। প্রতিটি নতুন পূর্ণসংখ্যা একটি এলোমেলো সংখ্যার পরে isোকানো হয় যা ইতিমধ্যে তালিকায় রয়েছে। হয়তো তালিকা শ্রেণিটি কেবল একটি অ্যারের চেয়ে ভাল কিছু ব্যবহার করে।


তালিকাটি একটি ইন্টারফেস, কোনও শ্রেণি নয়
বার্গমেটার

0

অ্যারে, এখন পর্যন্ত, সর্বাধিক ব্যবহৃত ডেটা স্ট্রাকচার। তবে লিঙ্কযুক্ত তালিকাগুলি তাদের নিজস্ব অনন্য উপায়ে কার্যকর প্রমাণিত হয়েছে যেখানে কমপক্ষে বলতে গেলে অ্যারেগুলি আনাড়ি - বা ব্যয়বহুল।

লিঙ্কযুক্ত তালিকাগুলি স্ট্যাক এবং সারিগুলি প্রয়োগ করতে কার্যকর হয় যেখানে তাদের আকার পৃথক হতে পারে। লিঙ্কযুক্ত তালিকার প্রতিটি নোড বেশিরভাগ নোডকে ঝামেলা ছাড়াই ধাক্কা দেওয়া বা পপ করা যায়। মাঝখানে কোথাও নোড সন্নিবেশ / মোছার জন্য একই। অ্যারেগুলিতে, তবে সমস্ত উপাদানকে স্থানান্তরিত করতে হবে, যা মৃত্যুদন্ড কার্যকর করার সময়ের ক্ষেত্রে একটি ব্যয়বহুল কাজ।

বাইনারি ট্রি এবং বাইনারি অনুসন্ধান গাছ, হ্যাশ টেবিল এবং চেষ্টাগুলি এমন কয়েকটি ডেটা স্ট্রাকচার যা অন্তত সিতে - এগুলি তৈরির জন্য আপনার মৌলিক উপাদান হিসাবে লিঙ্কযুক্ত তালিকাগুলি প্রয়োজন।

তবে লিঙ্কযুক্ত তালিকাগুলি এমন পরিস্থিতিতে পরিহার করা উচিত যেখানে প্রত্যাশা করা হয় যে এটি কোনও সূচককে তার সূচক দ্বারা কল করতে সক্ষম হবে।


0

এই পয়েন্টগুলি ব্যবহার করে প্রশ্নের একটি সহজ উত্তর দেওয়া যেতে পারে:

  1. অনুরূপ ধরণের ডেটা উপাদানগুলির সংগ্রহ প্রয়োজন হলে অ্যারেগুলি ব্যবহার করতে হবে। যেখানে লিঙ্কযুক্ত তালিকাটি নোড হিসাবে পরিচিত মিশ্রিত প্রকারের ডেটাযুক্ত লিঙ্কযুক্ত উপাদানগুলির একটি সংগ্রহ।

  2. অ্যারেতে, ও (1) সময়ে যে কোনও উপাদান পরিদর্শন করতে পারে। যদিও লিঙ্কযুক্ত তালিকায় আমাদের পুরো লিঙ্কযুক্ত তালিকাটি হে (ন) সময় নেওয়ার সাথে প্রয়োজনীয় নোডের দিকে যেতে হবে tra

  3. অ্যারেগুলির জন্য, প্রাথমিকভাবে একটি নির্দিষ্ট আকার ঘোষণা করা দরকার। তবে লিঙ্কযুক্ত তালিকাগুলি আকারে গতিশীল।

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