باتريشيا تري للاسترجاع السريع لعنوان IPv4 وبيانات الأقمار الصناعية

StackOverflow https://stackoverflow.com//questions/12709790

سؤال

أنا أكتب برنامجًا بلغة C++ يتطلب البحث عن عناوين IP (جميع IPv4) وتخزينها بطريقة سريعة.يحتوي كل عنوان IP على بيانات مرتبطة به.وفي حالة وجوده بالفعل في التجربة، فإنني أنوي دمج بيانات عنوان IP في التجربة مع بيانات العناوين الجديدة.إذا لم يكن موجودا، فإنني أنوي إضافته كمدخل جديد إلى المحاولة.ليس من الضروري حذف عنوان IP.

ومن أجل تنفيذ ذلك، أحتاج إلى تصميم باتريشيا تري.ومع ذلك، أنا غير قادر على تصور التصميم أبعد من ذلك.يبدو الأمر ساذجًا تمامًا بالنسبة لي، لكن الفكرة الوحيدة التي خطرت في ذهني هي تغيير عنوان IP إلى شكله الثنائي ثم استخدام المحاولة.ومع ذلك فأنا جاهل كيف بالضبط لتنفيذ هذا.

سأكون ممتنًا لك حقًا إذا تمكنت من مساعدتي في هذا الأمر.يرجى ملاحظة أنني وجدت سؤالاً مماثلاً هنا .كان السؤال أو الإجابة بشكل أكثر تحديدًا خارج نطاق فهمي لأن الكود الموجود في موقع ويب CPAN لم يكن واضحًا بدرجة كافية بالنسبة لي.

لاحظ أيضًا أن بياناتي هي التنسيق التالي

10.10.100.1:"توم"، "جاك"، "سميث"

192.168.12.12:"جونز"،"ليز"

12.124.2.1:"جيمي"، "جورج"

10.10.100.1:"مايك"، "هاري"، "جينيفر"

هل كانت مفيدة؟

المحلول

تحاول باتريشيا حل مشكلة العثور على أفضل بادئة تغطية لعنوان IP معين (يتم استخدامها بواسطة أجهزة التوجيه لتحديد سريعًا أن 192.168.0.0/16 هو الخيار الأفضل لـ 192.168.14.63، على سبيل المثال).إذا كنت تحاول فقط مطابقة عناوين IP تمامًا، فإن جدول التجزئة هو الخيار الأفضل.

نصائح أخرى

أعتقد أنك تقصد أ راديكستري.لدي تنفيذ أ راديكستري في Java، إذا كنت تريد استخدام ذلك كنقطة بداية، فهو المفتاح الفعلي لتعيين القيمة.يستخدم أ باتريشيا تري لأنه هيكل الدعم.

مثال باستخدام السلاسل التالية.

  1. 10.10.101.2
  2. 10.10.100.1
  3. 10.10.110.3

جرب المثال (غير مضغوط)

└── 1
    └── 0
        └── .
            └── 1
                └── 0
                    └── .
                        └── 1
                            ├── 0
                            │   ├── 1
                            │   │   └── .
                            │   │       └── (2) 10.10.101.2
                            │   └── 0
                            │       └── .
                            │           └── (1) 10.10.100.1
                            └── 1
                                └── 0
                                    └── .
                                        └── (3) 10.10.110.3

باتريشيا تري (مضغوطة)

└── [black] 10.10.1
    ├── [black] 0
    │   ├── [white] (0.1) 00.1
    │   └── [white] (1.2) 01.2
    └── [white] (10.3) 10.10.110.3
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top