আগুড়ি গাছ কী?


19

কিছু পুরানো হ্যাকার নিউজ আইটেমগুলি দিয়ে যাচ্ছি, আমি একজন ব্যবহারকারীর কাছ থেকে একটি পোস্ট পেলাম said

আগুরি গাছগুলি, যা একটি চৌম্বক-আকারের রেডিক্স ট্রাই (যেমন আপনি কোনও সফ্টওয়্যার রাউটিং টেবিল ব্যবহার করতে চান) কোনও এলআরইউ তালিকায় বিবাহ করেন এবং স্বয়ংক্রিয়ভাবে সমষ্টিগুলিকে সংশ্লেষিত করে (যেমন, সমস্ত আইপি জুড়ে 1,000 পর্যবেক্ষণ থেকে 10.0.0.0/16) প্যাটার্ন থেকে সন্নিবেশ তারা ট্র্যাফিক বিশ্লেষণে সবচেয়ে বেশি পরিচিত, তবে আমরা তাদের রানটাইম মেমরি বিশ্লেষণেও ব্যবহার করেছি।

~ tptacek

সুতরাং আমি এটি সন্ধান করার সিদ্ধান্ত নিয়েছি,

  • একটি দ্রুত গুগল অনুসন্ধান আমাকে এফ 1 ড্রাইভারের দিকে নিয়ে যায়।
  • উইকিপিডিয়ায় অনুসন্ধানের ফলে ভারতের কৃষিজাত ও জাপানের কিছু আইটেম নিয়ে যায়
  • স্ট্যাক ওভারফ্লো 0 টি ফলাফল হিট করে /programming//search?q=aguri site:stackoverflow.com/questions aguri

সুতরাং অবশেষে আমি এটি আবার ব্যবহারকারীর সাথে ফিরে যুক্ত করেছি দেখুন তার ব্লগে তার একটি লিঙ্ক রয়েছে

http://www.matasano.com/log/1009/aguri-coolest-data-structure-youve-never-heard-of/

তবে মারা গেছে।

সুতরাং, এই অগুরি ডেটা স্ট্রাকচারটি কী এবং যদি এটি একটি আসল ডেটা স্ট্রাকচার হয় তবে কেন এটি অন্য কোথাও নথিভুক্ত করা হচ্ছে না?

উত্তর:


15

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


9

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

আমার শ্রোতার পিসিআই অডিটরদের জন্য কিছু প্রতিকারমূলক কম্পিউটার বিজ্ঞান।

আমি আপনাকে এলোমেলো পূর্ণসংখ্যার একটি অ্যারের হস্তান্তর করি। এর মধ্যে তিন নম্বর থাকলে আপনি কীভাবে বলতে পারবেন?

ঠিক আছে, এর সুস্পষ্ট উপায় রয়েছে: যতক্ষণ না আপনি "3" খুঁজে পান বা অ্যারে ছাড়েন ততক্ষণ পর্যন্ত ক্রমান্বয়ে নম্বরগুলি পরীক্ষা করুন। লিনিয়ার অনুসন্ধান। 10 নম্বর দেওয়া, আপনি ধরে নিতে হবে এটি 10 ​​পদক্ষেপ নিতে পারে; এন সংখ্যা, এন পদক্ষেপ।

ছবি 1.png

লিনিয়ার অনুসন্ধান খারাপ। রৈখিক চেয়ে খারাপ করা কঠিন hard এর উপর উন্নতি করা যাক। অ্যারে বাছাই করুন।

ছবি 2.png

একটি সাজানো অ্যারে আলাদা কৌশল প্রস্তাব করে: অ্যারের মাঝখানে লাফিয়ে দেখুন এবং আপনি যে মানটি খুঁজছেন তা (বাম দিকে) কম বা ডানদিকের চেয়ে বড় কিনা তা দেখুন। পুনরাবৃত্তি করুন, যতক্ষণ না আপনি মানটি খুঁজে পান ততক্ষণে অর্ধেক অংশে অ্যারেটি কেটে নিন।

বাইনারি অনুসন্ধান। 10 নম্বর দেওয়া, এটি একটি সাজানো অ্যারেতে 3 টি পদক্ষেপ - 10 লগের লগ 2- লাগবে। ও (লগ এন) অনুসন্ধান দুর্দান্ত। আপনার যদি 65,000 উপাদান থাকে তবে সেগুলির মধ্যে একটিকে খুঁজতে কেবল 16 টি পদক্ষেপ নিতে চলেছে। উপাদানগুলি দ্বিগুণ করুন এবং এটি 17 টি পদক্ষেপ।

কিন্তু সাজানো অ্যারে স্তন্যপান; এক কিছুর জন্য, বাছাই করা লিনিয়ার অনুসন্ধানের চেয়ে ব্যয়বহুল। সুতরাং আমরা বাইনারি অনুসন্ধান বেশি ব্যবহার করি না; পরিবর্তে, আমরা বাইনারি গাছ ব্যবহার করি।

ছবি 3.png

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

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

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

ছবি 4.png

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

এখানে কেন রেডিক্সের চেষ্টাগুলি দুর্দান্ত:

Search performance varies with the key size, not the number of elements in the tree. With 16 bit keys, you’re guaranteed 16 steps

ভারসাম্য না রেখে গাছের উপাদানগুলির সংখ্যা নির্বিশেষে।

More importantly, radix tries give you lexicographic matching, which is a puffed-up way of saying “search with trailing wildcard”, or

"কমান্ড-লাইন-সমাপ্তি-শৈলী অনুসন্ধান"। র‌্যাডিক্স ট্রিতে আপনি দ্রুত "রো *" অনুসন্ধান করতে পারেন এবং "রোম" এবং "রোমসুল" এবং "রোসওয়েল" পেতে পারেন।

3।

আমি তোমাকে হারিয়েছি

এর প্রসঙ্গে রাখা যাক। চেষ্টা করা ইন্টারনেট রাউটিংয়ের জন্য একটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার। রাউটিং সমস্যাটি এরকম হয়:

You have a routing table with entries for “10.0.1.20/32 -> a” and “10.0.0.0/16 -> b”.

You need packets for 10.0.1.20 to go to “a”

You need packets for 10.0.1.21 to to to “b”

এটি একটি বেসিক বাইনারি গাছের সাথে সমাধান করা একটি কঠিন সমস্যা, তবে একটি রেডিক্স ট্রাই দিয়ে আপনি কেবল "1010.0000.0000.0000.0000.0001.0100" (10.0.1.20 এর জন্য) এবং "1010." (10.0.0.0 এর জন্য) চাইছেন )। লেক্সিকোগ্রাফিক অনুসন্ধান আপনাকে রাউটিংয়ের জন্য "সেরা মিল" দেয়। আপনি উপরের রুবি কোডটিতে এটি ব্যবহার করে দেখতে পারেন; * "10.0.0.0" যোগ করুন। to_ip কে ট্রাইতে যোগ করুন এবং "10.0.0.1" .to_ip অনুসন্ধান করুন।

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

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

আপনি একটি ব্যাকবোন আইএসপিতে একটি নেটওয়ার্ক অপারেটর। আপনার পৃথিবীতে মূলত "উপসর্গ" - আইপি নেটওয়ার্ক / নেটমাস্ক জোড়া রয়েছে। এই উপসর্গের নেটমাস্কগুলি আপনার কাছে অত্যন্ত গুরুত্বপূর্ণ। উদাহরণস্বরূপ, 121/8 কোরিয়ার অন্তর্গত; 121.128 / 10 কোরিয়া টেলিকমের, 121.128.10 / 24 কেটি গ্রাহকের এবং 121.128.10.53 গ্রাহকের অভ্যন্তরে একটি কম্পিউটার। আপনি যদি বোটনেট বা স্প্যামিং অপারেশন বা কৃমি প্রচারের সন্ধান করছেন তবে সেই নেটমাস্ক নম্বরটি আপনার কাছে বেশ গুরুত্বপূর্ণ।

দুর্ভাগ্যক্রমে, যদিও তা গুরুত্বপূর্ণ, আইপি প্যাকেটে কোথাও একটি "নেটমাস্ক" - স্ট্যাম্পড নেই - নেটমাস্কগুলি সম্পূর্ণরূপে একটি কনফিগারেশন বিশদ detail সুতরাং, আপনি যখন ট্রাফিক দেখছেন, আপনার সাথে কাজ করার জন্য এই ডেটাটি মূলত:

ips.png

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

সফ্টওয়্যার রাউটারগুলির মতো ব্যবহৃত একটি বাইনারি র‌্যাডিক্স ট্রাইও নিন। তবে গাছে নোডের সংখ্যা বেঁধে 10,000 বলুন। পিঠের লিঙ্কে, আইপি শিরোলেখগুলির বাইরে ঠিকানা রেকর্ডিং করা, আপনি মুহুর্তে 10,000 নোড সরিয়ে দেবেন।

একটি তালিকাতে নোডের তালিকা সংরক্ষণ করুন, এলআরইউ ক্রমে সাজানো। অন্য কথায়, আপনি যখন কোনও নোডের সাথে কোনও আইপি ঠিকানার সাথে মেলে, তখন নোডটিকে "স্পর্শ করুন", তালিকার শীর্ষে রেখে ic আস্তে আস্তে প্রায়শই দেখা যাওয়া ঠিকানাগুলি উপরের দিকে বুদ্বুদ হয়ে যায়, এবং দেখা যায় এমন নোডগুলি নীচে ডুবে যায়।

চিত্র 6.png

এখন কৌশল। যখন আপনার নোডগুলি শেষ হয়ে যায় এবং একটি নতুন প্রয়োজন হয়, তালিকার নীচ থেকে দাবি করুন। তবে আপনি যখন করবেন, নোড থেকে ডেটাটিকে তার পিতামাতার কাছে রোল করুন, এরকম:

চিত্র 5.png

10.0.1.2 এবং 10.0.1.3 ভাই / 32s, 10.0.1.2/31 এর দুটি অংশ। তাদের পুনরায় দাবি জানাতে, তাদেরকে 10.0.1.2/31 এ মার্জ করুন। যদি আপনার 10.0.1.2.2/31 দাবি করতে হয় তবে আপনি এটি 10.0.1.0/31 এর সাথে 10.0.1.0/30 ফর্ম করতে মার্জ করতে পারেন।

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

চো এই কালজয়ী আগুরি বলে। 5।

আগুড়ি বিএসডি লাইসেন্সপ্রাপ্ত। আপনি এটি ডাউনলোড করতে এবং ড্রাইভারের প্যাকেটগুলি পিসি্যাপের মাধ্যমে দেখেন এমন একটি ড্রাইভার প্রোগ্রাম চের পুরানো হোম পৃষ্ঠা থেকে দেখতে পারেন। 6।

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

সেখানে ছড়িয়ে ছিটিয়ে রয়েছে অসংখ্য লিঙ্ক। দুর্ভাগ্যক্রমে, সংরক্ষণাগার.অর্গ চিত্রগুলি রাখে না, কেবল পাঠ্য রাখে, যার মধ্যে বেশ কয়েকটি হারিয়ে গেছে। এখানে এটি সংরক্ষণাগারভুক্ত রয়েছে:


এটি প্রকৃতপক্ষে তথ্যটি দেখায়, এই লিঙ্কগুলি আর উপলভ্য হওয়ার কোনও কারণ নেই?
phwd

@ phwd আমি ওয়েবেব্যাক মেশিনের লিঙ্ক করা নীচের লিঙ্কগুলিকে কেবল অনুলিপি / অনুলিপি করেছি। এবং এটি নিজের সাথে লিঙ্ক করে, তাই আপনি ব্লগ পোস্টটি তৈরি করার সময় pages পৃষ্ঠাগুলি যেমন ছিল তেমন দেখতে পাচ্ছেন। উইকিপিডিয়া নিবন্ধ এবং রেজেক্স-তুলনা, আমি জানি এখনও বিদ্যমান।
ইজকাটা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.