বাইনারি গাছের প্রয়োগগুলি কী কী?


323

আমি ভাবছি বাইনারি গাছগুলির নির্দিষ্ট প্রয়োগগুলি কী। আপনি কিছু বাস্তব উদাহরণ দিতে পারেন?

উত্তর:


425

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

বাইনারি গাছের প্রয়োগ

  • বাইনারি অনুসন্ধান ট্রি - অনেকগুলি অনুসন্ধান অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয় যেখানে ডেটা অবিচ্ছিন্নভাবে প্রবেশ করা / ছেড়ে দেওয়া হয়, যেমন অনেক ভাষার লাইব্রেরির মধ্যে mapএবং setবস্তু।
  • বাইনারি স্পেস পার্টিশন - কি প্রতিটি বস্তু রেন্ডার করা দরকার তা নির্ধারণ করতে প্রায় প্রতিটি 3 ডি ভিডিও গেম ব্যবহৃত হয়।
  • বাইনারি চেষ্টা - রাউটার-টেবিলগুলি সংরক্ষণ করার জন্য প্রায় প্রতিটি উচ্চ-ব্যান্ডউইথ রাউটারে ব্যবহৃত হয়।
  • হ্যাশ ট্রি - পি 2 পি প্রোগ্রাম এবং বিশেষায়িত চিত্র-স্বাক্ষরগুলিতে ব্যবহৃত হয় যাতে একটি হ্যাশ যাচাই করা দরকার তবে পুরো ফাইলটি উপলভ্য নয়।
  • হিপস - দক্ষ অগ্রাধিকার-সারি বাস্তবায়নে ব্যবহৃত হয়, যা ঘুরেফিরে অনেক অপারেটিং সিস্টেমে সময়সূচী প্রক্রিয়াগুলির জন্য ব্যবহৃত হয়, রাউটারগুলিতে কোয়ালিটি অফ-সার্ভিস এবং এ * (রোবোটিকস এবং ভিডিও গেমস সহ এআই অ্যাপ্লিকেশনগুলিতে ব্যবহৃত পাথ সন্ধানকারী অ্যালগরিদম) । হিপ-বাছাইতেও ব্যবহৃত হয়।
  • হাফম্যান কোডিং ট্রি ( চিপ ইউনি ) - সংক্ষেপণ অ্যালগরিদমগুলিতে ব্যবহৃত হয়, যেমন .jpeg এবং .mp3 ফাইল-ফর্ম্যাট দ্বারা ব্যবহৃত।
  • জিজিএম ট্রি - সিউডো-এলোমেলো সংখ্যার একটি গাছ তৈরি করতে ক্রিপ্টোগ্রাফিক অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়।
  • সিনট্যাক্স ট্রি - এক্সপ্রেশনগুলি পার্স করার জন্য সংকলক এবং (স্পষ্টভাবে) ক্যালকুলেটর দ্বারা নির্মিত Const
  • ট্রেপ - ওয়্যারলেস নেটওয়ার্কিং এবং মেমরি বরাদ্দে ব্যবহৃত এলোমেলোভাবে ডেটা কাঠামো।
  • টি-ট্রি - যদিও বেশিরভাগ ডাটাবেসগুলি ড্রাইভে ডেটা সংরক্ষণ করার জন্য বি-ট্রি কিছু ফর্ম ব্যবহার করে, ডাটাবেসগুলি যা সমস্ত (বেশিরভাগ) তাদের ডেটা মেমরিতে রাখে তা করতে টি-ট্রি ব্যবহার করে।

যে কারণে বাইনারি গাছগুলি অনুসন্ধানের জন্য এন-অ্যারি গাছের চেয়ে বেশি ব্যবহৃত হয় তা হ'ল এন-আরি গাছগুলি আরও জটিল, তবে সাধারণত কোনও প্রকৃত গতির সুবিধা দেয় না।

mনোড সহ একটি (ভারসাম্যযুক্ত) বাইনারি গাছে , এক স্তর থেকে অন্য স্তরে চলে যাওয়ার জন্য একটি তুলনা প্রয়োজন এবং log_2(m)মোট স্তরগুলির log_2(m)তুলনায় মোট স্তর রয়েছে ।

বিপরীতে, একটি এন-অ্যারি গাছের পরবর্তী স্তরে যাওয়ার জন্য log_2(n)তুলনা (বাইনারি অনুসন্ধান ব্যবহার করে) প্রয়োজন হবে। যেহেতু log_n(m)মোট স্তর রয়েছে তাই অনুসন্ধানের জন্য মোট log_2(n)*log_n(m)= log_2(m)তুলনা প্রয়োজন । সুতরাং, যদিও এন-অ্যারি গাছগুলি আরও জটিল, তারা মোট তুলনার প্রয়োজনীয়তার ক্ষেত্রে কোনও সুবিধা দেয় না।

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


3
> ট্র্যাপ - ওয়্যারলেস নেটওয়ার্কিং এবং মেমরি বরাদ্দে এলোমেলোভাবে ডেটা কাঠামো ব্যবহৃত হয়। এগুলি সঠিকভাবে মেমরি বরাদ্দ এবং ওয়্যারলেস নেটওয়ার্কিংয়ে ব্যবহৃত হয়?
ফ্রি

1
প্রচুর দরকারী ডেটা স্ট্রাকচার এবং অ্যালগরিদম রয়েছে যা "বাইনারি" শব্দের ব্যবহার করে এবং "বাইনারি অনুসন্ধান ট্রি" আসলে তাদের মধ্যে একটি, তবে এটি যে প্রশ্ন করা হয়েছিল তা নয়। সরল পুরাতন "বাইনারি ট্রি" এর কী ব্যবহার রয়েছে, বাছাই করা একটি নয়, ভারসাম্যহীন নয়, পূর্ণ নেই। শুধু একটি সরল পুরানো এলোমেলো গাছ?
মাইকেল এরিকসন

4
@ মিশেল ইরিকসন আপনি উত্তরটি পড়েছেন? কারণ ঠিক এই প্রশ্নের উত্তর আমি দিয়েছি।
ব্লুরাজা - ড্যানি প্লেফুঘুফুট

1
আমি বিশ্বাস করি হ্যাশ গাছগুলিকে সাধারণত মের্কল ট্রি বলা হয়, কমপক্ষে বিটকয়েন এবং ইথেরিয়াম সম্প্রদায়, আইপিএফস ইত্যাদির মধ্যে
ডিউক

1
খুব খারাপ এই উত্তরটিতে অনেকগুলি ভুল রয়েছে। বাইনারি গাছের চেয়ে আধুনিক হার্ডওয়্যারে এন-অ্যারি গাছ প্রায় সবসময়ই পছন্দনীয়। নামের অ্যাপ্লিকেশনগুলি বেশিরভাগ বাইনারি গাছ ব্যবহার করে না।
স্টিফান এগগারমন্ট

290

যখন বেশিরভাগ লোক বাইনারি গাছ সম্পর্কে কথা বলেন, তারা বাইনারি অনুসন্ধানের কথা না ভেবে প্রায়শই বেশি হন গাছগুলি , তাই আমি প্রথমে এটি কভার করব।

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

একটি ভাল ক্ষেত্রে: আমাকে একবারে এমন কিছু সফ্টওয়্যার ঠিক করতে হয়েছিল যা ম্যানিপুলেশন এবং অনুসন্ধানের জন্য বাইনারি ট্রিতে এর ডেটা লোড করে। এটি তথ্য সাজানো আকারে লিখেছিল:

Alice
Bob
Chloe
David
Edwina
Frank

যাতে এটি পুনরায় পাঠ করার সময় নীচের গাছটি দিয়ে শেষ হয়:

  Alice
 /     \
=       Bob
       /   \
      =     Chloe
           /     \
          =       David
                 /     \
                =       Edwina
                       /      \
                      =        Frank
                              /     \
                             =       =

যা হ্রাসকারী ফর্ম। আপনি যদি সেই গাছে ফ্রাঙ্কের সন্ধান করতে যান তবে আপনাকে খুঁজে পাওয়ার আগে আপনাকে ছয়টি নোড সন্ধান করতে হবে।

বাইনারি গাছগুলি যখন আপনি ভারসাম্য বজায় রাখেন তখন অনুসন্ধানের জন্য সত্যই কার্যকর হয়ে ওঠে। এর মধ্যে তাদের মূল নোডের সাহায্যে সাব-গাছগুলি ঘোরানো জড়িত যাতে কোনও দুটি উপ-গাছের মধ্যে উচ্চতার পার্থক্য ১ এর চেয়ে কম বা সমান হয় those একই সময়ে একটির উপরে উপরের নামগুলি ভারসাম্যযুক্ত গাছে যুক্ত করা আপনাকে নিম্নলিখিত ক্রমটি পেতে পারে:

1.   Alice
    /     \
   =       =

 

2.   Alice
    /     \
   =       Bob
          /   \
         =     =

 

3.        Bob
        _/   \_
   Alice       Chloe
  /     \     /     \
 =       =   =       =

 

4.        Bob
        _/   \_
   Alice       Chloe
  /     \     /     \
 =       =   =       David
                    /     \
                   =       =

 

5.           Bob
        ____/   \____
   Alice             David
  /     \           /     \
 =       =     Chloe       Edwina
              /     \     /      \
             =       =   =        =

 

6.              Chloe
            ___/     \___
         Bob             Edwina
        /   \           /      \
   Alice     =      David        Frank
  /     \          /     \      /     \
 =       =        =       =    =       =

আপনি আসলে দেখতে পারেন পুরো উপ-গাছ বাঁদিকে আবর্তিত যেমন এন্ট্রি যোগ করা হয় (ধাপ 3 এবং 6) এবং এই আপনি একটি সুষম বাইনারি ট্রি যা সবচেয়ে খারাপ ক্ষেত্রে লুকআপ দেয় O(log N)বদলে O(N) যে অধ: পতিত ফর্ম দেয়। কোনও বিন্দুতে সর্বোচ্চ NULL ( =) একের বেশি স্তরের দ্বারা সর্বনিম্ন থেকে পৃথক হয় না। আর উপরে চূড়ান্ত গাছ, আপনি ফ্রাঙ্ক (তিন নোড শুধুমাত্র তাকিয়ে জানতে পারেন Chloe, Edwinaএবং, পরিশেষে,Frank )।

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

একটি ত্রি-মুখী গাছ সহ, আপনি এখানে শেষ:

  Alice Bob Chloe
 /     |   |     \
=      =   =      David Edwina Frank
                 /     |      |     \
                =      =      =      =

এটি সাধারণত আইটেমের সূচকগুলির জন্য কীগুলি বজায় রাখতে ব্যবহৃত হয়। আমি হার্ডওয়্যারটির জন্য অপ্টিমাইজড ডাটাবেস সফ্টওয়্যার লিখেছি যেখানে নোডটি হ'ল একটি ডিস্ক ব্লকের আকার (বলে, 512 বাইট) এবং আপনি একক নোডে যতটা সম্ভব কীগুলি রেখেছেন। পয়েন্টার এই ক্ষেত্রে আসলে একটি নির্দিষ্ট দৈর্ঘ্যের রেকর্ড ডাইরেক্ট-ফাইল অ্যাক্সেস সূচক ফাইল থেকে পৃথক মধ্যে রেকর্ড নম্বর ছিল (তাই রেকর্ড সংখ্যা Xমাত্র চাইছেন দ্বারা পাওয়া যেতে পারে X * record_length)।

উদাহরণস্বরূপ, যদি পয়েন্টারগুলি 4 বাইট হয় এবং কীটির আকার 10 হয়, 512-বাইট নোডে কীগুলির সংখ্যা 36 হয় That's এটি 36 কী (360 বাইট) এবং 37 পয়েন্টার (148 বাইট) সহ মোট 508 বাইট সহ নোড প্রতি 4 বাইট নষ্ট

মাল্টি-ওয়ে কী ব্যবহার করে একটি দ্বি-পর্যায়ে অনুসন্ধানের জটিলতার পরিচয় দেওয়া (নোডের সঠিক কীটি অনুসন্ধানের জন্য একটি ছোট অনুক্রমের (বা লিনিয়ার বাইনারি) অনুসন্ধানের সাথে মিলিত সঠিক নোডের সন্ধানের একাধিক উপায় অনুসন্ধান) তবে এতে সুবিধাটি এটির চেয়ে কম ডিস্ক I / O করা বেশি।

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

O(log N)ওভারের সুবিধাগুলিও মনে রাখবেনO(N) যখন আপনার ডেটা সেটগুলি ছোট হয় তখন সত্যিই উপস্থিত হয় না। আপনি যদি নিজের ঠিকানা বইটিতে পনেরো জনকে সঞ্চয় করার জন্য একটি বহু-উপায় গাছ ব্যবহার করছেন তবে এটি সম্ভবত ওভারকিল। সুবিধাগুলি যখন আপনি গত দশ বছরে আপনার এক লক্ষ গ্রাহকের কাছ থেকে প্রতিটি অর্ডারের মতো কিছু সঞ্চয় করে রাখেন তখন আসে।

বিগ-ও স্বরলিপিটির পুরো বিন্দুটি Nঅনন্তের কাছে যাওয়ার সাথে কী ঘটে তা নির্দেশ করে । কিছু লোকের মধ্যে দ্বিমত থাকতে পারে তবে আপনি যদি নিশ্চিত হন যে ডেটা সেটগুলি নির্দিষ্ট আকারের নীচে থাকবে যতক্ষণ না অন্য কিছু সহজেই পাওয়া যায় না :-)


বাইনারি গাছের অন্যান্য ব্যবহারের মতো, এখানে অনেকগুলি রয়েছে:

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

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


28
+1 যেমন আমরা লিখিত উত্তর জন্য; আরও আমাকে ভারসাম্যযুক্ত বহুমুখী গাছের সাথে পরিচয় করিয়ে দেওয়া, এমন কিছু যা আমি আগে কখনও পাইনি।
টনি

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

1
আধুনিক হার্ডওয়্যারগুলিতে, প্রায় সমস্ত গাছগুলি বহুমুখী হওয়া উচিত।
স্টিফান এগারমন্ট

89

মোর্স কোডের সংগঠন একটি বাইনারি গাছ।

বাইনারি-ট্রি

জলহস্তী-কোড


4
এটি আমার প্রিয় উত্তর। তালিকার আরও অক্ষরগুলিতে পৌঁছানোর জন্য প্রয়োজনীয় গণ্য জটিলতার হ্রাস চিত্রিত করে।
গোঁফ

7
আমি সত্যিই এই উত্তর উপভোগ!
ডানকান এডওয়ার্ডস

2
আমি হ্যাম রেডিওর জন্য ফিল্টার তৈরি করা একটি সংস্থার জন্য কাজ করতাম, এটি আমাকে 'ফেরার পথে' নিয়ে যায় ...
জোসেফডোগি

62

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

বাইনারি ট্রি

বাইনারি গাছগুলি দরকারী, কারণ আপনি ছবিতে দেখতে পাচ্ছেন, আপনি যদি গাছের কোনও নোড খুঁজতে চান তবে আপনাকে কেবল সর্বোচ্চ 6 বার দেখতে হবে। উদাহরণস্বরূপ, আপনি যদি নোড 24 অনুসন্ধান করতে চান তবে আপনি মূল থেকে শুরু করবেন।

  • মূলটির 31 টির মান রয়েছে যা 24 এর চেয়ে বেশি, সুতরাং আপনি বাম নোডে যান।
  • বাম নোডের মান 15 রয়েছে যা 24 এর চেয়ে কম, সুতরাং আপনি ডান নোডে যান।
  • ডান নোডের মান 23 হয় যা 24 এর চেয়ে কম হয়, তাই আপনি ডান নোডে যান।
  • ডান নোডের মান 27 হয় যা 24 এর চেয়ে বেশি হয়, তাই আপনি বাম নোডে যান।
  • বাম নোডের মান 25 হয় যা 24 এর চেয়ে বেশি হয়, তাই আপনি বাম নোডে যান।
  • নোডের 24 টির মান রয়েছে যা আমরা খুঁজছি is

এই অনুসন্ধান নীচে চিত্রিত: গাছ অনুসন্ধান

আপনি দেখতে পাচ্ছেন যে আপনি প্রথম পাসে পুরো গাছের অর্ধেকটি নোড বাদ দিতে পারেন। এবং দ্বিতীয় বাম subtree অর্ধেক। এটি খুব কার্যকর অনুসন্ধানের জন্য তোলে। এটি করা হয় 4 বিলিয়ন উপাদানগুলিতে করা হয় তবে আপনাকে কেবলমাত্র সর্বোচ্চ 32 বার অনুসন্ধান করতে হবে। অতএব, গাছটিতে যত বেশি উপাদান রয়েছে, তত তত দক্ষ আপনার অনুসন্ধান করা যেতে পারে।

বিলোপ জটিল হয়ে উঠতে পারে। নোডের যদি 0 বা 1 বাচ্চা থাকে তবে এটি মুছতে হবে না এমন কিছু বাদ দেওয়ার জন্য কিছু পয়েন্টার সরিয়ে নিয়ে যাওয়া বিষয়। তবে আপনি 2 বাচ্চা সহ কোনও নোড সহজে মুছতে পারবেন না। সুতরাং আমরা একটি শর্ট কাট নিতে। ধরা যাক আমরা নোড 19 মুছতে চেয়েছি।

মুছুন 1

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

মুছুন 3

বাম এবং ডান পয়েন্টার বাদে আমরা এখন 18 এর সমস্ত বিষয়বস্তু অনুলিপি করি এবং আসল 18 নোডটি মুছি।

মুছুন 4


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

আমার এভিএল গাছ কীভাবে নিজেকে কমপ্যাক্ট এবং যথাসম্ভব ভারসাম্য বজায় রেখেছে তা দেখানোর জন্য এখানে একটি নমুনা দেওয়া হচ্ছে।

এখানে চিত্র বর্ণনা লিখুন

বাছাই করা অ্যারেতে, অনুসন্ধানগুলি এখনও O(log(n))গাছের মতো লাগবে , তবে এলোমেলো সন্নিবেশ এবং অপসারণ গাছের পরিবর্তে ও (এন) নেবে O(log(n))। কিছু এসটিএল পাত্রে তাদের কার্যকারিতা বৈশিষ্ট্যগুলি তাদের সুবিধার্থে ব্যবহার করে যাতে সন্নিবেশ এবং অপসারণের সময় সর্বাধিক লাগে O(log n)যা খুব দ্রুত। এই পাত্রে মধ্যে কয়েকটি হল map, multimap, set, এবং multiset

একটি এভিএল গাছের উদাহরণ কোডটি http://ideone.com/MheW8 এ পাওয়া যাবে


5
আপনি শুধুমাত্র হে (লগ ঢ) অনুসন্ধান করতে যদি আপনি একটি বাইনারি সাথে এসেছেন ডিলিং আছে অনুসন্ধান বৃক্ষ (নিজেই যে বিজ্ঞ।) নির্বিচারে বাইনারি গাছ কোন ক্রম সীমাবদ্ধতার আছে, এবং একটি র্যান্ডম বিএসটি অনুসন্ধান জটিলতা হে (লগ হয়েছে )।
dlev

এগুলি প্রাসঙ্গিক স্ট্যান্ডার্ড পাত্রে সংরক্ষণ করা ধরণের নয়।
কুকুরছানা

12

প্রধান অ্যাপ্লিকেশন হ'ল বাইনারি অনুসন্ধান গাছ । এগুলি একটি ডেটা কাঠামো যাতে অনুসন্ধান, সন্নিবেশ এবং অপসারণ সবই খুব দ্রুত ( log(n)অপারেশন সম্পর্কে )


1
বাইনারি অনুসন্ধান গাছগুলি কোনও অ্যাপ্লিকেশন নয় তবে এটি একটি বিশেষ ধরণের বাইনারি গাছ।
nbro

@ এনব্রো: আপনি অর্থহীন শব্দার্থবিজ্ঞানের পক্ষে তর্ক করছেন, সেগুলি উভয়ই একই কথা বলার বৈধ উপায়। নোট করুন যে এখানে "অ্যাপ্লিকেশন" এর অর্থ "কম্পিউটার অ্যাপ্লিকেশন" হিসাবে একই জিনিস নয়
ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

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

11

11

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

মূলত গাছের প্রতিটি নোডের একটি মান থাকে যা হয় নিজেই অন্তর্নিহিত বা এর বাচ্চাদের মূল্যবোধকে পরিচালনা করে পুনরাবৃত্তভাবে মূল্যায়ন করা হয়।

উদাহরণস্বরূপ, অভিব্যক্তিটি (1+3)*2হিসাবে প্রকাশ করা যেতে পারে:

    *
   / \
  +   2
 / \
1   3

অভিব্যক্তিটি মূল্যায়ন করতে, আমরা পিতামাতার মান জিজ্ঞাসা করি। পরিবর্তে এই নোডটি তার বাচ্চাদের কাছ থেকে এর মান পায়, একটি প্লাস অপারেটর এবং একটি নোড যা কেবল '2' থাকে contains প্লাস অপারেটর পরিবর্তে '1' এবং '3' মানযুক্ত বাচ্চাদের কাছ থেকে এর মানগুলি পায় এবং তাদের যোগ করে 4 টি গুণক নোডে ফিরে আসে যা 8 দেয়।

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


9

9

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

ভারসাম্যযুক্ত গাছগুলি প্রায়শই মানচিত্র বা সেট প্রয়োগের জন্য ব্যবহৃত হয়। এগুলি ও (nlogn) বাছাইয়ের জন্যও ব্যবহার করা যেতে পারে, এমনকি এটি করার আরও ভাল উপায় রয়েছে।

এছাড়াও অনুসন্ধান / সন্নিবেশ / মুছে ফেলার জন্য হ্যাশ টেবিলগুলি ব্যবহার করা যেতে পারে, যা সাধারণত বাইনারি অনুসন্ধান গাছের তুলনায় ভাল পারফরম্যান্স থাকে (ভারসাম্যযুক্ত বা না)।

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

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

অন্যান্য গাছ যেমন ফে বি + গাছগুলি ডেটাবেজে ব্যাপকভাবে ব্যবহৃত হয়


9

সর্বাধিক সাধারণ অ্যাপ্লিকেশনগুলির মধ্যে একটি হ'ল সঞ্চিত উপাদানগুলিকে দ্রুত অ্যাক্সেস করতে এবং সন্ধানের জন্য সজ্জিত আকারে দক্ষতার সাথে ডেটা সঞ্চয় করা। উদাহরণস্বরূপ, std::mapবা std::setসি ++ স্ট্যান্ডার্ড লাইব্রেরিতে।

ডেটা স্ট্রাকচার হিসাবে বাইনারি ট্রি এক্সপ্রেশন পার্সার এবং এক্সপ্রেশন সলভারগুলির বিভিন্ন বাস্তবায়নের জন্য কার্যকর।

এটি ডাটাবেসের কিছু সমস্যা সমাধানের জন্যও ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, ইনডেক্সিং।

সাধারণত, বাইনারি ট্রি নির্দিষ্ট গাছ ভিত্তিক ডেটা কাঠামোর একটি সাধারণ ধারণা এবং বিভিন্ন নির্দিষ্ট ধরণের বাইনারি গাছ বিভিন্ন বৈশিষ্ট্য সহ নির্মিত হতে পারে constructed


7

সি ++ এসটিএল এবং জাভা এবং সি # এর মতো অন্যান্য ভাষায় অনেকগুলি স্ট্যান্ডার্ড গ্রন্থাগার। বাইনারি অনুসন্ধান গাছ সেট এবং মানচিত্র প্রয়োগ করতে ব্যবহৃত হয়।


2
প্রকৃতপক্ষে সি ++ সেট / মানচিত্রে লাল-কালো গা on় গাছগুলির উপর ভিত্তি করে, যা দ্বিপাক্ষিক অনুসন্ধান গাছ যা আরও কয়েকটি বিধিনিষেধযুক্ত।
ইদান কে

6

বাইনারি গাছগুলির অন্যতম গুরুত্বপূর্ণ প্রয়োগ হ'ল সুষম বাইনারি অনুসন্ধান গাছের মতো:

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

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


5

এগুলি ডেটা বাছাইয়ের দ্রুত উপায় হিসাবে ব্যবহার করা যেতে পারে। ও (লগ (এন)) এ বাইনারি অনুসন্ধান গাছে ডেটা .োকান। তারপরে গাছটিকে বাছাই করার জন্য ট্র্যাশ করুন।


2

আপনার প্রোগ্রামগুলি সিনট্যাক্স, বা সে জন্য অন্যান্য অনেকগুলি জিনিস যেমন প্রাকৃতিক ভাষা বাইনারি ট্রি ব্যবহার করে পার্স করা যায় (যদিও প্রয়োজনীয় নয়) arily



2

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


2
কিসের তুলনায় সাবোটিমল?

বহুতল গাছ। একটি মেমোরি অ্যাক্সেস থেকে আপনি যে সমস্ত ডেটা পাবেন তা লিনিয়ার সন্ধান নতুন নতুন মেমোরি অ্যাক্সেস করার চেয়ে অনেক দ্রুত
স্টিফান এগারমন্ট

0

একটি সংকলক যিনি এএসটির উপস্থাপনের জন্য বাইনারি গাছ ব্যবহার করেন, তিনি পোস্টর্ডার, ইনর্ডার জাতীয় গাছের পার্সিংয়ের জন্য পরিচিত অ্যালগরিদমগুলি ব্যবহার করতে পারেন program প্রোগ্রামারটিকে নিজস্ব অ্যালগোরিদম নিয়ে আসতে হবে না। সোর্স ফাইলের জন্য বাইনারি ট্রি এন-অ্যারি গাছের চেয়ে বেশি হওয়ায় এর বিল্ডিংয়ে আরও সময় লাগে। এই উত্পাদনটি নিন: সেলস্টেমেন্ট: = "যদি" "(" এক্সপ্রেস ")" স্টেমেন্ট "ইএলএসই" স্টেমেন্ট একটি বাইনারি গাছে এর নলগুলির 3 টি স্তর থাকবে তবে এন-অ্যারি গাছের 1 টি স্তর থাকবে (চিডসের)

এজন্য ইউনিক্স ভিত্তিক ওএস-এস ধীর গতিতে রয়েছে।

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