.NET তে কোন গাছ <T> শ্রেণি নেই কেন?


89

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

আমি কি কেবল অন্ধ, এবং এটি খুঁজে পাচ্ছি না ... এটি কি ছাত্রলীগের কোথাও দাফন করা হয়েছে? যদি তা না হয় তবে কেউ বাইনারি গাছের জন্য একটি বিনামূল্যে বা ওপেন-সোর্স সি # /। নেট লাইব্রেরির সুপারিশ করতে পারেন? সাধারণত জেনেরিকদের নিয়োগ করে এমন একটি।

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


রাজি। আমার মাঝে মাঝে (ও (লগ এন) সময়ে) দুটি নোড যা কোনও মানকে আবদ্ধ করে (যখন সংগ্রহে মানটি পাওয়া যায় না) সন্ধান করার দরকার পড়ে। উদাহরণস্বরূপ সংগ্রহে (গাছের) মধ্যে 13 এবং 17 রয়েছে (অন্যদের মধ্যে) এবং আমি 16 এর চেয়ে কম এবং কম 16 এর চেয়ে বড় সন্ধান করছি A একটি গাছ এটি করতে পারে তবে ডিকোচার, সাজানো তালিকা এবং হ্যাশ টেবিলগুলি ও (এন) নেয় ।
লেস

উত্তর:


31

আপনি ঠিক বলেছেন, ছাত্রলীগে কিছুই নেই। আমি সন্দেহ করি কারণ এটি একটি গাছ ব্যবহার করবেন কিনা তা বেছে নেওয়া সাধারণত একটি বাস্তবায়ন বিশদ এবং অন্যথায় ডেটা অ্যাক্সেস করার একটি অপ্রচলিত উপায়। এটি, আপনি বলবেন না, "বাইনারি-অনুসন্ধানের জন্য উপাদান # 37"; পরিবর্তে, আপনি বলবেন, "আমাকে # 37 উপাদানটি পান"।

তবে আপনি কি সি 5 এ একবার দেখেছেন ? এটি অত্যন্ত কার্যকর এবং তাদের বেশ কয়েকটি বৃক্ষ বাস্তবায়ন রয়েছে ( 1 , 2 , 3 )


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

69

আপনি আপনার নিজের সংজ্ঞা দিতে পারেন:

public class MyTree<K, V> : Dictionary<K, MyTree<K, V>>
{
    public V Value { get; set; }
}

বা অপ্রকাশিত:

public class MyTree<V> : HashSet<MyTree<V>>
{
    public V Value { get; set; }
}

তবে এটি আপনার সঙ্কলনের সময় কতগুলি গাছের স্তর হ্যান্ডেল করবেন তা জানতে হবে, আমি কি ভুল করছি?
ভিভারকে

4
না, সি # সংকলক এই বাক্য গঠনটিকে সমর্থন করে।
জেসন

4
সতর্কতা অবলম্বন করুন যে উপাদানগুলিকে এইভাবে অ-অর্ডার দেওয়া হয়েছে
সেবাস্তিয়ান

@ ভিভারকে সম্ভবত আপনি সি ++ টেমপ্লেট নিয়ে ভাবছিলেন। । নেট জেনেরিকগুলি রানটাইম ধরণের।
টম ব্লডজেট

আমি কৌতুহলী. আপনি কিভাবে এটি ব্যবহার করব? ব্যবহারিকভাবে? কোন নমুনা?
সায়ফুল নিজাম ইয়াহইয়া

39

আপনি এই ধরনের বাস্তবায়ন থেকে কি চান?

বাইনারি গাছ? লাল, কালো? মূলা গাছ? বি-গাছ? আর-ট্রি? আর * -ট্রি?

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


4
প্রশ্নের "কেন" অংশের জন্য সেরা উত্তর।
জোয়েল কোহোর্ন

এবং সেগুলি কেবল অনুসন্ধান গাছ। এছাড়াও রয়েছে এক্সপ্রেশন ট্রি, সিদ্ধান্তের চাপ, ...
হেন্ক হলটারম্যান

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

12
একটি সমান্তরাল মহাবিশ্বে কেউ প্রশ্ন জিজ্ঞাসা করছেন: "নেট।" তে কোনও তালিকার প্রকার কেন নেই? এবং তারা উত্তর পেয়েছে: "আপনি এই জাতীয় বাস্তবায়ন থেকে কী চান? একটি অ্যারে? একটি লিঙ্কযুক্ত তালিকা? একটি সারি? ক অভিধান? " আমি মনে করি এটি একটি সিকুইটার উত্তর নয় is
রিমস্মর্ফ

15

আমি বিশ্বাস করি যে SortedDictionaryলগ ()) সন্নিবেশ করানোর সাথে সাথে, আপনি ট্রি ডেটা স্টাচার থেকে পুনরুদ্ধার বৈশিষ্ট্যগুলি আশা করতে পারেন।

http://msdn.microsoft.com/en-us/library/f7fta44c(VS.80).aspx


12

SortedSet<T>বাইনারি অনুসন্ধান ট্রি রেফ হিসাবে প্রয়োগ করা হয় । SortedDictionary<TKey, TValue>অভ্যন্তরীণভাবে SortedSet<T>এটি ব্যবহার করে তাই এটি একটি বাইনারি অনুসন্ধান ট্রি রেফ


4
দুর্ভাগ্যক্রমে এগুলি কেবল অর্ডার করা মানচিত্র এবং তালিকার বাস্তবায়ন। বাইনারি ট্রি হিসাবে পুনঃব্যবহারের জন্য কোনওটিই সহায়ক নয় - এই গাছ কাঠামোগুলি কেবল সংগ্রহের একটি বাস্তবায়ন বিশদ। আমি আসলে এমন একটি শ্রেণীর সন্ধান করছি যা গাছের কাঠামোটি প্রকাশ করে।
এল বুশকিন

9

না, Tree<T>বিসিএলে কোনও " পছন্দসই" টাইপ নেই (এমন কিছু যা আমাকে সর্বদা বিস্মিত করেছে) তবে এখানে একটি ভাল নিবন্ধ যা আপনাকে সি # তে আপনার নিজের প্রয়োগের মধ্য দিয়ে চলবে।

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



-5

আপনি ব্যবহার করতে পারেন এমন একটি ট্রিনোড রয়েছে । এটি জেনেরিক এবং উইন্ডোজ ফর্মগুলিতে লুকিয়ে নেই এবং ট্রিভিউ নিয়ন্ত্রণের সাথে ব্যবহৃত হয় তবে আপনি এটি অন্য কোথাও ব্যবহার করতে পারেন।


হ্যাঁ, তবে এটিতে কেবল সিস্টেমের একটি ট্যাগ সম্পত্তি রয়েছে b জেনেরিক নেই <টি> প্যারামিটার
হেন্ক হলটারম্যান

4
আমি এ জাতীয় জিনিসগুলি করতে সর্বদা অদ্ভুত বোধ করি। এটি আপনার নির্দিষ্ট উদাহরণের সাথে কম দৃশ্যমান, তবে লোকেরা যদি নিয়মিতভাবে ক্লাসগুলি পুনরায় উদ্দেশ্য করে বলে, নির্ভর করে, এর ফলে, হার্ড-টু-ব্যাখ্যা-নির্ভরতা তৈরি হতে পারে এবং পুনরায় উদ্দেশ্যমূলক শ্রেণিটি যদি অপ্রত্যাশিতভাবে পরিবর্তিত হয় তবে আপনাকে সমস্যার মধ্যে ফেলতে পারে if নির্ভরতা সংস্করণ।
পল মরি

4
এটি ব্যবহার করে লাভ কী হবে? একটি ট্রি নোড সাধারণত এটিতে কোনও প্রাসঙ্গিক কার্যকারিতা থাকে না। এটি কেবলমাত্র শিশুদের এবং শেষ পর্যন্ত একটি পিতামাতার উল্লেখ রেখেছে। কোনও সিস্টেমের অপব্যবহার করার কোনও কারণ নেই ind উইন্ডোজ itফর্মস ক্লাস এটির জন্য! এটি নিজে লিখুন - এক মিনিট বা তারও কম সময়ে।
ব্যবহারকারী 492238
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.