لحلها ، من الملائم استخدام دالة تجزئة تُرجع قيمة فريدة لكل صف (تجزئة).
يحتوي C ++ 11 على ميزة مضمنة للحصول على التجزئة: التجزئة . نبسب ؛
في المستقبل ، لحساب عدد التجزئات ، من الأفضل استخدام جدول تجزئة الخريطة غير المرتب ، والذي ظهر أيضًا في C ++ 11. يمكنك معرفة المزيد حول استخدام الخريطة في الدورة التدريبية هياكل البيانات الديناميكية - & gt؛ المصفوفات الترابطية: الخريطة.

مثال على الحصول على تجزئة من السلسلة & quot؛ test & quot ؛:

التجزئة  & lt؛  سلسلة  & gt؛  hash_fn؛
 size_t  str_hash  =  hash_fn ( & quot؛ test & quot؛ ) ؛
cout  & lt؛ & lt؛  str_hash؛


ستكون النتيجة: "2949673445" ، لذلك من كل سلسلة فريدة يمكنك الحصول على تجزئة فريدة يمكن استخدامها كمفتاح في & nbsp؛ unordered_map.

تجزئة سلسلة هي تمثيل لسلسلة باعتبارها عددًا ما ، فريدًا (سنفترض أن احتمال حدوث تضارب ضئيل) لكل سلسلة. يسمح لك هذا بتخزين أي بيانات مهمة (مثل كلمات المرور) في قاعدة البيانات ليس كسلاسل ، ولكن كأرقام. يتيح لك ذلك حماية كلمات المرور إذا تمكن المهاجم من الوصول إلى قاعدة بيانات كلمات المرور ، لأنه لن يحصل على كلمات المرور بنفسه ، ولكن فقط تمثيلها العددي ، ويكاد يكون من المستحيل الحصول على سلسلة من خلال التجزئة الخاصة بها (خاصةً دون معرفة خوارزمية التجزئة ). & nbsp؛
غالبًا ما تستخدم التجزئة متعددة الحدود في برمجة مشاكل المنافسة.
من أفضل الطرق لتحديد دالة التجزئة للسلسلة S كما يلي:
h (S) & nbsp؛ = & نبسب ؛ S [0] نبسب ؛ + نبسب ؛ S [1] * P & nbsp؛ + نبسب ؛ S [2] * P ^ 2 & nbsp؛ + نبسب ؛ S [3] * P ^ 3 & nbsp؛ + نبسب ؛ ... نبسب ؛ + نبسب ؛ S [N] * P ^ N