আমি প্রস্তাবিত উত্তরগুলি পারফরম্যান্সে ফোকাস দেখতে পাচ্ছি। নীচে সরবরাহ করা নিবন্ধটি কার্য সম্পাদন সম্পর্কিত নতুন কিছু সরবরাহ করে না, তবে এটি অন্তর্নিহিত প্রক্রিয়াগুলি ব্যাখ্যা করে। এছাড়াও নোট করুন যে Collection
এটি প্রশ্নের মধ্যে উল্লিখিত তিন প্রকারের উপর দৃষ্টি নিবদ্ধ করে না , তবে নাম স্থানের সমস্ত প্রকারকে সম্বোধন করে System.Collections.Generic
।
http://geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-theright-colલેક્-class.aspx
নিষ্কাশন:
অভিধান <>
অভিধানটি সম্ভবত সর্বাধিক ব্যবহৃত এসোসিয়েটিভ ধারক শ্রেণি। অভিধানটি সাহচর্যমূলক অনুসন্ধান / সন্নিবেশ / মোছার জন্য দ্রুততম শ্রেণি কারণ এটি কভারগুলির নীচে একটি হ্যাশ টেবিল ব্যবহার করে । কীগুলি হ্যাশ হওয়ার কারণে, কী টাইপটি সঠিকভাবে গেটহ্যাশকোড () এবং সমতুল্য () প্রয়োগ ক্রমান্বিত উচিত বা আপনার নির্মাণের অভিধানে একটি বাহ্যিক আইকুয়ালিটি কম্প্যাকার সরবরাহ করা উচিত। অভিধানে আইটেমগুলির সন্নিবেশ / মোছা / দেখার সময়টি ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধরণের থাকে - ও (1) - যার অর্থ ডিকশনারিটি যত বড়ই হয় না, কিছু খুঁজে পেতে সময় লাগে তুলনামূলকভাবে স্থির থাকে। এটি উচ্চ-গতির জন্য দেখার জন্য অত্যন্ত প্রয়োজনীয়। একমাত্র ক্ষতিটি হ'ল অভিধান, হ্যাশ টেবিল ব্যবহারের প্রকৃতি অনুসারে আনর্ডারড হয়আপনি কোনও ডিকশনারে সহজেই ক্রমগুলি আইটেমগুলি অতিক্রম করতে পারবেন না ।
সাজানো অভিধান <>
সাজানো অভিধান অভিধানে অভিধানের মতো তবে বাস্তবায়নে খুব আলাদা। SortedDictionary কী দ্বারা অনুক্রমে আইটেম বজায় রাখার জন্য কভার অধীনে একটি বাইনারি ট্রি ব্যবহার । বাছাইয়ের ফলস্বরূপ, কীটির জন্য ব্যবহৃত ধরণেরটি সঠিকভাবে আইকাম্পারেবল প্রয়োগ করতে হবে যাতে কীগুলি সঠিকভাবে বাছাই করা যায়। বাছাই করা অভিধানটি আইটেমগুলিকে যথাযথভাবে বজায় রাখার দক্ষতার জন্য কিছুটা অনুসন্ধানের সময়কে ব্যবসা করে, এইভাবে সাজানো অভিধানে সন্নিবেশ / মুছুন / দেখার সময় লোগারিদমিক - ও (লগ এন) হয়। সাধারণত লোগারিথমিক সময় সহ, আপনি সংগ্রহের আকার দ্বিগুণ করতে পারেন এবং আইটেমটি অনুসন্ধানের জন্য এটি কেবলমাত্র একটি অতিরিক্ত তুলনা করতে হবে। আপনি দ্রুত অনুসন্ধান করতে চাইলে সাজানো অভিধান ব্যবহার করুন তবে কী অনুসারে সংগ্রহটি বজায় রাখতে সক্ষম হতে চান।
সাজানো তালিকা <>
বাছাই করা তালিকা জেনেরিক ধারকগুলির মধ্যে সাজানো অন্যান্য সংযুক্ত কন্টেইনার শ্রেণি। সোর্টড ডিকোরিয়ানের মতো আবারও বাছাই করা তালিকা কী-মান জোড়াগুলি বাছাই করতে একটি কী ব্যবহার করে । সাজানো অভিধানের মতো নয় তবে বাছাই করা তালিকার আইটেমগুলি সাজানো অ্যারের আইটেম হিসাবে সংরক্ষণ করা হয়। এর অর্থ হ'ল সন্নিবেশ এবং মুছে ফেলা লিনিয়ার - ও (এন) - কারণ কোনও আইটেম মোছা বা যুক্ত করা সমস্ত আইটেমকে তালিকার উপরে বা নীচে স্থানান্তর করতে পারে। সন্ধানের সময়টি তবে ও (লগ এন) কারণ সোর্টলিস্ট তালিকাতে তার কী দ্বারা তালিকার কোনও আইটেম সন্ধান করতে বাইনারি অনুসন্ধান ব্যবহার করতে পারে। তাহলে আপনি কেন কখনও এটি করতে চান? ঠিক আছে, উত্তরটি হ'ল আপনি যদি সাজানো তালিকাটি আপ-ফ্রন্টটি লোড করতে যাচ্ছেন তবে সন্নিবেশগুলি ধীরে ধীরে হবে তবে অ্যারে ইনডেক্সিং নিম্নোক্ত অবজেক্টের লিঙ্কগুলির চেয়ে দ্রুত, কারণ অনুসন্ধানগুলি একটি সাজানো অভিধানের তুলনায় প্রান্তিকভাবে দ্রুত। আমি আবার এমন পরিস্থিতিতে ব্যবহার করেছি যেখানে আপনি দ্রুত অনুসন্ধান করতে চান এবং কী অনুসারে সংগ্রহটি বজায় রাখতে চান এবং যেখানে সন্নিবেশ এবং মুছে ফেলা খুব বিরল।
অন্তর্নিহিত পদ্ধতিগুলির সাময়িক সংক্ষিপ্তসার
মতামত অত্যন্ত স্বাগত জানায় যেহেতু আমি নিশ্চিত যে আমি সবকিছু ঠিকভাবে পাইনি।
- সমস্ত অ্যারে আকারের হয়
n
।
- অ-বাছাই করা অ্যারে = .এড / / যোগ করুন ও (1) সরানো তবে আইটেম (i) হ'ল (এন)।
- বাছাই করা অ্যারে = .এড / /। সরানো হয় ও (এন), তবে। আইটেম (i) হ'ল হে (লগ এন)।
অভিধান
স্মৃতি
KeyArray(n) -> non-sorted array<pointer>
ItemArray(n) -> non-sorted array<pointer>
HashArray(n) -> sorted array<hashvalue>
অ্যাড
- যোগ
HashArray(n) = Key.GetHash
# হে (1)
- যোগ
KeyArray(n) = PointerToKey
# হে (1)
- যোগ
ItemArray(n) = PointerToItem
# হে (1)
অপসারণ
For i = 0 to n
, i
কোথায় HashArray(i) = Key.GetHash
# ও (লগ এন) (সাজানো অ্যারে) সন্ধান করুন
HashArray(i)
# O (n) (সাজানো অ্যারে) সরান
KeyArray(i)
# O (1) সরান
ItemArray(i)
# O (1) সরান
আইটেম পান
For i = 0 to n
, i
কোথায় HashArray(i) = Key.GetHash
# ও (লগ এন) (সাজানো অ্যারে) সন্ধান করুন
- ফিরুন
ItemArray(i)
লুপ মাধ্যমে
For i = 0 to n
, ফিরে ItemArray(i)
সাজানো অভিধান
স্মৃতি
KeyArray(n) = non-sorted array<pointer>
ItemArray(n) = non-sorted array<pointer>
OrderArray(n) = sorted array<pointer>
অ্যাড
- যোগ
KeyArray(n) = PointerToKey
# হে (1)
- যোগ
ItemArray(n) = PointerToItem
# হে (1)
For i = 0 to n
, i
কোথায় KeyArray(i-1) < Key < KeyArray(i)
(ব্যবহার ICompare
) # ও (এন) সন্ধান করুন
- যোগ
OrderArray(i) = n
# হে (ঢ) (সাজানো অ্যারে)
অপসারণ
For i = 0 to n
, i
কোথায় KeyArray(i).GetHash = Key.GetHash
# ও (এন) সন্ধান করুন
KeyArray(SortArray(i))
# O (n) সরান
ItemArray(SortArray(i))
# O (n) সরান
OrderArray(i)
# O (n) (সাজানো অ্যারে) সরান
আইটেম পান
For i = 0 to n
, i
কোথায় KeyArray(i).GetHash = Key.GetHash
# ও (এন) সন্ধান করুন
- ফিরুন
ItemArray(i)
লুপ মাধ্যমে
For i = 0 to n
, ফিরে ItemArray(OrderArray(i))
সাজানো তালিকা
স্মৃতি
KeyArray(n) = sorted array<pointer>
ItemArray(n) = sorted array<pointer>
অ্যাড
For i = 0 to n
, i
কোথায় KeyArray(i-1) < Key < KeyArray(i)
(ব্যবহার ICompare
) # ও (লগ এন) সন্ধান করুন
- যোগ
KeyArray(i) = PointerToKey
# হে (ঢ)
- যোগ
ItemArray(i) = PointerToItem
# হে (ঢ)
অপসারণ
For i = 0 to n
, i
কোথায় KeyArray(i).GetHash = Key.GetHash
# ও (লগ এন) সন্ধান করুন
KeyArray(i)
# O (n) সরান
ItemArray(i)
# O (n) সরান
আইটেম পান
For i = 0 to n
, i
কোথায় KeyArray(i).GetHash = Key.GetHash
# ও (লগ এন) সন্ধান করুন
- ফিরুন
ItemArray(i)
লুপ মাধ্যমে
For i = 0 to n
, ফিরে ItemArray(i)