Hashing Advanced Data Structure PDF
Document Details
Uploaded by PeaceableTucson
Tags
Summary
These notes cover advanced data structures, specifically hashing techniques. The document outlines different types of hashing methods such as linear probing, quadratic probing, and double hashing, explaining how data is stored and retrieved using hash functions. It gives practical examples and illustrates how these methods are used in data processing.
Full Transcript
ر Advanced data structure Hashing ؤر ر الفكرة هنا ايه ؟! عندي مجموعة عناصر (ارقام) عايز اخزنها في Array بمعنى :لو اعطانا مجموعة ارقام زيي :...
ر Advanced data structure Hashing ؤر ر الفكرة هنا ايه ؟! عندي مجموعة عناصر (ارقام) عايز اخزنها في Array بمعنى :لو اعطانا مجموعة ارقام زيي : 𝟑𝟏 𝟐𝟔 , 𝟑𝟎 , 𝟕𝟎 , 𝟒𝟓 , و طلب مننا تخزينهم في Arrayو حددلنا الطريقة اللي هنتبع خطواتها عشان نخزن العناصر دي .. يعني فيه أنواع او طرق لل Hasing؟! اه فيه ..و الدكتور هيذكرلنا في السؤال نستخدم أي نوع او طريقة للحل لو هنحلها مقالي ..طيب هما ايه ؟! انواعه ال : Hasing Open Close Addressing Type of Addressing (Close (Open )hashing hashing )hashing Double hashing Linear Quadritic probing Seperated probing chning هنفهم كل نوع منهم و هنعرف نحلهم ازاي ...لكن الزم نعرف األول ان فيه حاجة اسمها ال Hash function ...دي زيي قانون كده بنطبقه عشان نعرف الرقم ده هنحطه في أي خانة ...يعني هتساعدنا اكيد في الحل .. نبدأ بأول نوع في ال Open Addressingو هو ال : Linear probing هيجيلنا مجموعة ارقام زيي : 𝟒𝟑 𝟕𝟎 , 𝟓𝟎 , 𝟖𝟎 , 𝟑𝟎 , 𝟏𝟖 , بس األرقام اللي هيديهالنا ؟! ال ..هيدينا حاجتين كمان ... الطريقة او نوع ال hashingاللي هنحل بيه 01 .. 02حجم ال Arrayاللي هنخزن فيها األرقام دي ...طيب لو مذكرش الحجم في السؤال؟! هنفترض احنا ان حجمها بيساوي عدد األرقام اللي ادهالنا في السؤال في مسألتنا دي قالنا نحلها Linear probingو حجم ال arrayهو ... 8 خطوات الحل : احنا قلنا من شوية ان ال Hash functionبتاعة النوع ده او أي نوع عموما الزم نعرفها عشان نعرف نحل بيها صح ؟! طيب ايه هي ال Hash functionبقى او هي بتنص على ايه ؟! 𝑒𝑢𝑙𝑎𝑣 ℎ ൫𝑘𝑒𝑦൯ = 𝑘𝑒𝑦 𝑚𝑜𝑑 𝑙𝑒𝑛𝑔𝑡ℎ = ℎ𝑎𝑠ℎ القيمة او الرقم )(% حجم ال ... arrayو رقم ال indexاللي اللي عايز اضيفه ده ممكن يبقى معطى بيطلعلي من المعادلة او اننا نجيبه من عدد العناصر اللي عندنا هي زيي القانون كده ثابتة بنتبعها عشان نعرف نحل المسألة ...طيييب ....هنطبقها ازاي بقى في الحل بتاعنا ؟! ارقام indexالخطوة األولى :هنرسم ال arrayبتاعتنا اللي هنحط فيها القيم و نكتب ال للتذكير :الزم نراعي ال ( lengthالحجم) و ده يا بيبقى مذكور في السؤال يا احنا بنجيبه من عدد العناصر اللي في السؤال 7 6 5 4 3 2 1 0 طبعا عارفين ان ال indexيبدأ من 0 الخطوة الثانية هنبدأ نحط كل رقم في خانته الصحيحة ...طيب ازااي ؟! عن طريق اننا ناخد كل اللي قيمة و نطبق عليها ال Hash functionو الناتج اللي هيطلع هيكون ده رقم ال هنحط فيه القيمة دي ...بمعنى : هنمسك اول قيمة هنخزنها ...رقم ... 70هنعتبرها هي ال Kayو نعوض بيها في ال Hash function يعني هنعوض عن ال Keyب 70 و هنعوض عن ال lengthب ( 8و دي ثابتة طول المسألة ألن الحجم طبيعي مش هيتغير) 𝟔 = 𝟖 𝒉 ሺ𝟕𝟎ሻ = 𝟕𝟎 % هنروح نحط الرقم 70بقى في indexرقم 6 7 𝟎𝟕 6 5 4 3 2 1 0 كده خزننا اول قيمة ...نكمل و نخزن تاني قيمة ...رقم 50 يعني هنعوض عن ال Keyب 50 و هنعوض عن ال lengthب 8 𝟐 = 𝟖 𝒉 ሺ𝟓𝟎ሻ = 𝟓𝟎 % هنروح نحط الرقم 50بقى في indexرقم 2 7 𝟎𝟕 6 5 4 3 𝟎𝟓 2 1 0 كده خزننا ثاني قيمة ...نكمل و نخزن ثالت قيمة ...رقم 80 يعني هنعوض عن ال Keyب 80 و هنعوض عن ال lengthب 8زيي ما هي 𝟎 = 𝟖 𝒉 ሺ𝟖𝟎ሻ = 𝟖𝟎 % هنروح نحط الرقم 80بقى في indexرقم 0 7 𝟎𝟕 6 5 4 3 𝟎𝟓 2 c 1 𝟎𝟖 0 كده خزننا ثالث قيمة ...نكمل و نخزن رابع قيمة ...رقم 30 يعني هنعوض عن ال Keyب 80 و هنعوض عن ال lengthب 8زيي ما هي 𝟔 = 𝟖 𝒉 ሺ𝟑𝟎ሻ = 𝟑𝟎 % لو رحنا نضيف الرقم 30في خانة رقم 6هنالقي ان هي فيها رقم اوريدي ...وهنا مينفعش نضيف قيمتين في نفس الخانة ... لما يحصل كده ده بنسميه (تعارض)طيب لما بيحصل تعارض بنعمل ايه ؟! بكل بساطة بنروح نعمل تغير في ال Hash functionعشان نقدر نضيف الرقم ...بمعنى !! بدال م تبقى ال Hash functionكده : ℎ ሺ30ሻ = 30 % 8 = 6 هنجمع iعلى قيمة ال keyيعني هتبقى كده : ? = 𝟖 𝒉 ሺ𝟑𝟎ሻ = ሺ𝟑𝟎 + 𝒊ሻ % ايه هي ال iدي ؟! هي عدد مرات التعارض اللي حصلت للرقم ده ...بمعنى !! الرقم ده اول مرة يحصله تعارض صح ؟! ف هنا ال iهتبقى ب ... 1طيب لو حصل تعارض تاني ؟! قيمة ال iهتبقى ب 2و هكذا بقى لحد ما نالقيله مكان بالتعويض بقى عن ال iب : 1 𝟕 = 𝟖 𝒉 ሺ𝟑𝟎ሻ = ሺ𝟑𝟎 + 𝒊ሻ % بما ان الخانة رقم 7فاضية ف هنحط فيها عادي رقم 30 𝟎𝟑 7 𝟎𝟕 6 5 4 3 𝟎𝟓 2 1 𝟎𝟖 0 طيب للعلم بس ...بمجرد ما حطينا الرقم خالص بنرجع لل Hash functionاألصلية بتاعتا عادي جدا ... كده خزننا رابع قيمة ...نكمل و نخزن خامس قيمة ...رقم 18 يعني هنعوض عن ال Keyب 18 و هنعوض عن ال lengthب 8زيي ما هي 𝟐 = 𝟖 𝒉 ሺ𝟏𝟖ሻ = 𝟏𝟖 % هنا حصل تعارض برضو ...ف هنلجئ على طول لل Hash functionالبديلة ... ? = 𝟖 𝒉 ሺ𝟏𝟖ሻ = ሺ𝟏𝟖 + 𝒊ሻ % و ألنه اول تعارض يحصل للرقم 18ف قيمة ال iهتبقى ب ... 1 𝟑 = 𝟖 𝒉 ሺ𝟏𝟖ሻ = ሺ𝟏𝟖 + 𝟏ሻ % بما ان الخانة رقم 3فاضية ف هنحط فيها عادي رقم 18 𝟎𝟑 7 𝟎𝟕 6 5 4 𝟖𝟏 3 𝟎𝟓 2 1 𝟎𝟖 0 نخزن بقى اخر قيمة اللي هي : 34 يعني هنعوض عن ال Keyب 34 و هنعوض عن ال lengthب 8زيي ما هي 𝟐 = 𝟖 𝒉 ሺ𝟑𝟒ሻ = 𝟑𝟒 % هنا حصل تعارض برضو ...ف هنلجئ على طول لل Hash functionالبديلة ... ? = 𝟖 𝒉 ሺ𝟑𝟒ሻ = ሺ𝟑𝟒 + 𝒊ሻ % و ألنه اول تعارض يحصل للرقم 34ف قيمة ال هتبقى ب ... 1 𝟑 = 𝟖 𝒉 ሺ𝟑𝟒ሻ = ሺ𝟑𝟒 + 𝟏ሻ % حصل تعارض للمرة التانية !! ألن الخانة رقم 3مليانة ...ف المرة دي قيمة ال iهتبقى ب 2بقى .. 𝟒 = 𝟖 𝒉 ሺ𝟑𝟒ሻ = ሺ𝟑𝟒 + 𝟐ሻ % بما ان الخانة رقم 4فاضية ف هنحط فيها عادي رقم 34 𝟎𝟑 7 𝟎𝟕 6 5 𝟒𝟑 4 𝟖𝟏 3 𝟎𝟓 2 1 𝟎𝟖 0 و بكدا خزنا كل القيم بال ! Linear probingو كده انتهى الحل .. ؤ نشوف تاني نوع بقى من ال Open Addressingو هو ال : Quadritic probing هيجيلنا مجموعة ارقام زيي : 𝟗𝟒 𝟐𝟓 , 𝟑𝟎 , 𝟏𝟕 , 𝟏𝟏𝟓 , بس األرقام اللي هيديهالنا ؟! ال ..هيدينا حاجتين كمان برضو نفس النوع األول ... الطريقة او نوع ال hashingاللي هنحل بيه 01 .. 02حجم ال Arrayاللي هنخزن فيها األرقام دي ...طيب لو مذكرش الحجم في السؤال؟! هنفترض احنا ان حجمها بيساوي عدد األرقام اللي ادهالنا في السؤال في مسألتنا دي قالنا نحلها Quadritic probingو حجم ال arrayهو . 6 خطوات الحل : هنستخدم نفس ال Hash functionبتاعتنا اللي عرفناها عادي جدا... 𝑒𝑢𝑙𝑎𝑣 ℎ ൫𝑘𝑒𝑦൯ = 𝑘𝑒𝑦 𝑚𝑜𝑑 𝑙𝑒𝑛𝑔𝑡ℎ = ℎ𝑎𝑠ℎ الخطوة األولى :هنرسم ال arrayبتاعتنا اللي هنحط فيها القيم و نكتب ارقام ال للتذكير :الزم نراعي ال ( lengthالحجم) و ده يا بيبقى مذكور في السؤال يا احنا بنجيبه من عدد العناصر اللي في السؤال 5 4 3 2 1 0 الخطوة الثانية هنبدأ نحط كل رقم في خانته الصحيحة ...عن طريق اننا ناخد كل قيمة و نطبق عليها ال Hash functionو الناتج اللي هيطلع هيكون ده رقم ال indexاللي هنحط فيه القيمة دي ...بمعنى : هنمسك اول قيمة هنخزنها ...رقم ... 25هنعتبرها هي ال Kayو نعوض بيها في ال Hash function يعني هنعوض عن ال Keyب 25 و هنعوض عن ال lengthب ( 6و دي ثابتة طول المسألة ألن الحجم طبيعي مش هيتغير) 𝟏 = 𝟔 𝒉 ሺ𝟐𝟓ሻ = 𝟐𝟓 % هنروح نحط الرقم 25بقى في indexرقم 1 5 4 3 2 𝟓𝟐 1 0 كده خزننا اول قيمة ...نكمل و نخزن تاني قيمة ...رقم 30 يعني هنعوض عن ال Keyب 30 و هنعوض عن ال lengthب 6 𝟎 = 𝟔 𝒉 ሺ𝟐𝟓ሻ = 𝟑𝟎 % هنروح نحط الرقم 30بقى في indexرقم 0 5 4 3 2 𝟓𝟐 1 𝟎𝟑 0 كده خزننا ثاني قيمة ...نكمل و نخزن ثالث قيمة ...رقم 17 يعني هنعوض عن ال Keyب 17 و هنعوض عن ال lengthب 6 𝟓 = 𝟔 𝒉 ሺ𝟏𝟕ሻ = 𝟏𝟕 % هنروح نحط الرقم 17بقى في indexرقم 5 𝟕𝟏 5 4 3 2 𝟓𝟐 1 𝟎𝟑 0 كده خزننا ثالث قيمة ...نكمل و نخزن رابع قيمة ...رقم 115 يعني هنعوض عن ال Keyب 115 و هنعوض عن ال lengthب 6 𝟏 = 𝟔 𝒉 ሺ𝟏𝟏𝟓ሻ = 𝟏𝟏𝟓 % هنا حصل تعارض !! هنلجئ ل Hash functionتانية لكن الفرق بقى ان هما بدال م نزود ...iال هنزود i2 بدال م تبقى ال Hash functionكده : ⋯ = 𝟔 𝒉 ሺ𝟏𝟏𝟓ሻ = 𝟏𝟏𝟓 % هنجمع i2على قيمة ال keyيعني هتبقى كده : ?= 𝟔 𝒉 ሺ𝟏𝟏𝟓ሻ = ൫𝟏𝟏𝟓 + 𝒊𝟐 ൯% ايه هي ال i2دي ؟! نفس معنى ال iبالضبط قبل كده بس تربيع بقى ...هي عدد مرات التعارض اللي حصلت للرقم ده ...بمعنى !! الرقم ده اول مرة يحصله تعارض صح ؟! ف هنا ال iهتبقى ب ... 1طيب لو حصل تعارض تاني ؟! قيمة ال iهتبقى ب 2و هكذا بقى لحد ما نالقيله مكان بالتعويض بقى عن ال iب : 1 𝟐 = 𝟔 𝒉 ሺ𝟏𝟏𝟓ሻ = ൫𝟏𝟏𝟓 + 𝟏𝟐 ൯% هنروح نحط الرقم 115بقى في indexرقم 2 𝟕𝟏 5 4 3 𝟓𝟏𝟏 2 𝟓𝟐 1 𝟎𝟑 0 كده خزننا رابع قيمة ...نكمل و نخزن خامس و اخر قيمة ...رقم 49 يعني هنعوض عن ال Keyب 49 و هنعوض عن ال lengthب 6 𝟏 = 𝟔 𝒉 ሺ𝟒𝟗ሻ = 𝟒𝟗 % هنا حصل تعارض برضو ...ف هنلجئ على طول لل Hash functionالبديلة ... 𝟐 = 𝟔 𝒉 ሺ𝟒𝟗ሻ = ൫𝟒𝟗 + 𝟏𝟐 ൯% هنالحظ انه ستيل فيه تعارض !! خانة رقم 2مليانة ...ف هنلجئ تاني لل Hash functionلكن المرة دي قيمة ال iهتبقى ب ( 2ألن ده تاني تعارض حصل مع نفس الرقم ) 𝟓 = 𝟔 𝒉 ሺ𝟒𝟗ሻ = ൫𝟒𝟗 + 𝟐𝟐 ൯% حصل تعارض للمرة التالتة !!! ف قيمة ال iهتبقى : 3 𝟒 = 𝟔 𝒉 ሺ𝟒𝟗ሻ = ൫𝟒𝟗 + 𝟑𝟐 ൯% هنروح نحط الرقم 49بقى في indexرقم 4 𝟕𝟏 5 𝟗𝟒 4 3 𝟓𝟏𝟏 2 𝟓𝟐 1 𝟎𝟑 0 و بكدا خزنا كل القيم بال !Quadritic probingو كده انتهى الحل .. نشوف ثالث نوع بقى من ال Open Addressingو هو ال : Double hashing المسألة بتاعتها هتبقى لفظية شوية ..لسبب و نعرف ليه ..ممكن تبقى كده : Assume aninitially empty hash table with 11 entries in which hash function uses division method , show contents of hash table after adding keys : 𝟒𝟑 𝟔𝟕 , 𝟖𝟏𝟓 , 𝟒𝟔 , 𝟑𝟗 , 𝟐 , 𝟗𝟎𝟏 , *double hashing with f(key) = (key *3) % 7 هنا هيدينا بقى حاجة زيادة عن النوعين اللي فاتوا : 01الطريقة او نوع ال hashingاللي هنحل بيه .. 02حجم ال Arrayاللي هنخزن فيها األرقام دي ...طيب لو مذكرش الحجم في السؤال؟! هنفترض احنا ان حجمها بيساوي عدد األرقام اللي ادهالنا في السؤال 03في نوع ال Double hashingبيدينا هو Hash functionجاهزة من عنده نستخدمها لما يحصل تعارض في مسألتنا دي قالنا نحلها Double hashingو حجم ال arrayهو..قالنا في السؤال انه .. 11 خطوات الحل : زيي ما قلنا قبل شوية ...احنا هنطبق ال Hash functionبتاعتنا اللي احنا عارفينها عاادي جدا ..اللي هي : 𝒆𝒖𝒍𝒂𝒗 𝒉𝒔𝒂𝒉 = 𝒉𝒕𝒈𝒏𝒆𝒍 𝒅𝒐𝒎 𝒚𝒆𝒌 = 𝒉 ൫𝒌𝒆𝒚൯ و لما يحصل تعارض مفيش بقى Hash functionثابتة نلجئ لها زي األنواع اللي فاتت ال النوع ده مميز شوية ...هو بيدينا ال Hash functionاللي هنستخدمها و هنا طبعا ال Hash functionاللي ادهالنا هي : 𝟕 𝒇 ൫𝒌𝒆𝒚൯ = ሺ𝒌𝒆𝒚 ∗ 𝟑ሻ% الخطوة األولى :هنرسم ال arrayبتاعتنا اللي هنحط فيها القيم و نكتب ارقام ال للتذكير :الزم نراعي ال ( lengthالحجم) و ده يا بيبقى مذكور في السؤال يا احنا بنجيبه من عدد العناصر اللي في السؤال 10 9 8 7 6 5 4 3 2 1 0 الخطوة الثانية هنبدأ نحط كل رقم في خانته الصحيحة ...طيب ازااي ؟! نفسسس بالضبط ما عملن قبل كده ...عن طريق اننا ناخد كل قيمة و نطبق عليها ال Hash functionو الناتج اللي هيطلع هيكون ده رقم ال arrayاللي هنحط فيه القيمة دي ...بمعنى : هنمسك اول قيمة هنخزنها ...رقم ... 67هنعتبرها هي ال Kayو نعوض بيها في ال Hash function يعني هنعوض عن ال Keyب67 و هنعوض عن ال lengthب ( 11هو أعطاها لنا في السؤال) 𝟏 = 𝟏𝟏 𝒉 ሺ𝟔𝟕ሻ = 𝟔𝟕 % الخانة رقم 1فاضية ف هنحط فيها الرقم 67عادي 10 9 8 7 6 5 4 3 2 𝟕𝟔 1 0 كده خزننا اول قيمة ...نكمل و نخزن ثاني قيمة ...رقم 815 يعني هنعوض عن ال Keyب 815 و هنعوض عن ال lengthب 11زيي ما هي 𝟏 = 𝟏𝟏 𝒉 ሺ𝟖𝟏𝟓ሻ = 𝟖𝟏𝟓 % هنا حصل تعارض برضو ...ف هنلجئ على طول لل Hash functionالبديلة اللي ادهالنا في السؤال ... لما نطبقها هتطلع كده : 𝟐 = 𝟕 𝒉 ሺ𝟖𝟏𝟓ሻ = ሺ𝟖𝟏𝟓 ∗ 𝟑ሻ % الخانة رقم 2فاضية ف هنحط فيها الرقم 815عادي 10 9 8 7 6 5 4 3 𝟓𝟏𝟖 2 𝟕𝟔 1 0 كده خزننا ثاني قيمة ...نكمل و نخزن ثالث قيمة ...رقم 46 يعني هنعوض عن ال Keyب 46 و هنعوض عن ال lengthب 11زيي ما هي 𝟐 = 𝟏𝟏 𝒉 ሺ𝟒𝟔ሻ = 𝟒𝟔 % هنا حصل تعارض برضو ...ف هنلجئ على طول لل Hash functionالبديلة اللي ادهالنا في السؤال ... لما نطبقها هتطلع كده : 𝟓 = 𝟕 𝒉 ሺ𝟒𝟔ሻ = ሺ𝟒𝟔 ∗ 𝟑ሻ % الخانة رقم 5فاضية ف هنحط فيها الرقم 46عادي 10 9 8 7 6 𝟔𝟒 5 4 3 𝟓𝟏𝟖 2 𝟕𝟔 1 0 كده خزننا ثالث قيمة ...نكمل و نخزن رابع قيمة ...رقم 39 يعني هنعوض عن ال Keyب 39 و هنعوض عن ال lengthب 11زيي ما هي 𝟔 = 𝟏𝟏 𝒉 ሺ𝟑𝟗ሻ = 𝟑𝟗 % الخانة رقم 6فاضية ف هنحط فيها 10 الرقم 39عادي 9 8 7 𝟗𝟑 6 𝟔𝟒 5 4 3 𝟓𝟏𝟖 2 𝟕𝟔 1 0 كده خزننا رابع قيمة ...نكمل و نخزن خامس قيمة ...رقم 2 يعني هنعوض عن ال Keyب 2 و هنعوض عن ال lengthب 11زيي ما هي 𝟐 = 𝟏𝟏 𝒉 ሺ𝟐ሻ = 𝟐 % هنا حصل تعارض برضو ...ف هنلجئ على طول لل Hash functionالبديلة اللي ادهالنا في السؤال ... لما نطبقها هتطلع كده : 𝟔 = 𝟕 𝒉 ሺ𝟐ሻ = ሺ𝟐 ∗ 𝟑ሻ % حصل تعارض تااني ...لكن لو تالحظا مفيش هنا متغير نزوده كل مرة ب 1صح !زي ال iصح !! عشان كده هنقول ان القيمة دي مش هتتحط ده في كل المسائل اللي بتتحل Double hashing؟! اه ...مجرد م بنعوض بال Hash functionاللي ادهالنا و مطلعتلناش خانة فاضية هتقول ع طول ان الرقم ده ملوش مكان (not allocate)... يعني كده رقم 2مش هنضيفها ؟! ايوا طيب نخزن الرقم اللي بعد ال 2و هو رقم 901 يعني هنعوض عن ال Keyب 901 و هنعوض عن ال lengthب 11زيي ما هي 𝟑 = 𝟏𝟏 𝒉 ሺ𝟗𝟎𝟏ሻ = 𝟗𝟎𝟏 % 10 الخانة رقم 3فاضية ف هنحط فيها الرقم 901عادي 9 8 7 𝟗𝟑 6 𝟔𝟒 5 4 𝟏𝟎𝟗 3 𝟓𝟏𝟖 2 𝟕𝟔 1 0 فاضل كده اخر رقم نخزنه ...هو رقم 34 يعني هنعوض عن ال Keyب 34 و هنعوض عن ال lengthب 11زيي ما هي 𝟏 = 𝟏𝟏 𝒉 ሺ𝟑𝟒ሻ = 𝟑𝟒 % هنا حصل تعارض برضو ...ف هنلجئ على طول لل Hash functionالبديلة اللي ادهالنا في السؤال ... لما نطبقها هتطلع كده : 𝟒 = 𝟕 𝒉 ሺ𝟑𝟒ሻ = ሺ𝟑𝟒 ∗ 𝟑ሻ % الخانة رقم 4فاضية ف هنحط فيها الرقم 34عادي 10 9 8 7 𝟗𝟑 6 𝟔𝟒 5 𝟒𝟑 4 𝟏𝟎𝟗 3 𝟓𝟏𝟖 2 𝟕𝟔 1 0 خلصنا األرقام !! يبقى خلصت المسألة ... كده خلصنا أنواع ال Open Addressingنيجي بقى ألول و اخر نوع في ال Close Addressing Seperated chning الفكرة هنا او اإلختالف فيين ؟! في النوع ده نقدر نخزن اكتر من قيمة في الخانة الواحدة ...بعكس كل األنواع اللي فاتت ...طيب هو ده اإلختالف الوحيد ؟! ال ...في النوع ده بنخزن القيم اه ...لكن برة الخانة مش جواها ...هنشوف ازاي بعد شوية : هيجيلنا مجموعة ارقام زيي : 𝟕𝟔 𝟑𝟗 , 𝟒𝟔 , 𝟑𝟒 , 𝟗𝟎𝟏 , 𝟖𝟏𝟓 , بس األرقام اللي هيديهالنا ؟! ال ..هيدينا حاجتين كمان برضو نفس النوع األول ... الطريقة او نوع ال hashingاللي هنحل بيه 01 .. 02حجم ال Arrayاللي هنخزن فيها األرقام دي ...طيب لو مذكرش الحجم في السؤال؟! هنفترض احنا ان حجمها بيساوي عدد األرقام اللي ادهالنا في السؤال في مسألتنا دي قالنا نحلها Seperated chningو حجم ال arrayهو. 11 خطوات الحل : هنستخدم نفس ال Hash functionبتاعتنا اللي عرفناها عادي جدا... 𝒆𝒖𝒍𝒂𝒗 𝒉𝒔𝒂𝒉 = 𝒉𝒕𝒈𝒏𝒆𝒍 𝒅𝒐𝒎 𝒚𝒆𝒌 = 𝒉 ൫𝒌𝒆𝒚൯ طيب هيكون فيه Hash functionبديلة في النوع ده ؟! ال..الن ببساطة احنا ينفع نخزن كذا قيمة في الخانة فيها ! الواحدة ف مش هيحصل تعارض اصال يخلينا نحتاج Hash function الخطوة األولى :هنرسم ال arrayبتاعتنا اللي هنحط فيها القيم و نكتب ارقام ال للتذكير :الزم نراعي ال ( lengthالحجم) و ده يا بيبقى مذكور في السؤال يا احنا بنجيبه من عدد العناصر اللي في السؤال 10 9 8 7 6 5 4 3 2 1 0 الخطوة الثانية هنبدأ نحط كل رقم في خانته الصحيحة ...طيب ازااي ؟! نفسسس بالضبط ما عملن قبل كده ...عن طريق اننا ناخد كل قيمة و نطبق عليها ال Hash functionو الناتج اللي هيطلع هيكون ده رقم ال arrayاللي هنحط فيه القيمة دي ...بمعنى : هنمسك اول قيمة هنخزنها ...رقم ... 39هنعتبرها هي ال Kayو نعوض بيها في ال Hash function يعني هنعوض عن ال Keyب 39 و هنعوض عن ال lengthب 11 𝟔 = 𝟏𝟏 𝒉 ሺ𝟑𝟗ሻ = 𝟑𝟗 % هنضيف رقم 39في خانة رقم 6 طيب هنخزنها ازااي ؟! ليها طريقة خاصة و هي : هنيجي عند الخانة اللي هنخزن فيها الرقم : هنا مبنضفش حاجة .. و نعمل كده : هنخزن الرقم هنا هيبقى شكلها كده بعد ما نخزن رقم : 36 10 9 8 7 𝟗𝟑 6 5 4 3 2 1 0 خزنا اول قيمة ...نخزن تاني قيمة بقى اللي هي رقم 46 يعني هنعوض عن ال Keyب 46 و هنعوض عن ال lengthب 11زيي ما هي 𝟐 = 𝟏𝟏 𝒉 ሺ𝟒𝟔ሻ = 𝟒𝟔 % هنضيف رقم 46 10 في الخانة رقم 2 9 8 7 𝟗𝟑 6 5 4 3 𝟔𝟒 2 1 0 خزنا ثاني قيمة ...نخزن ثالث قيمة بقى اللي هي رقم 34 يعني هنعوض عن ال Keyب 34 و هنعوض عن ال lengthب 11زيي ما هي 𝟏 = 𝟏𝟏 𝒉 ሺ𝟑𝟒ሻ = 𝟑𝟒 % هنضيف رقم 34 في الخانة رقم 1 10 9 8 7 𝟗𝟑 6 5 4 3 𝟔𝟒 2 𝟒𝟑 1 0 خزنا ثالث قيمة ...نخزن رابع قيمة بقى اللي هي رقم 901 يعني هنعوض عن ال Keyب 901 و هنعوض عن ال lengthب 11زيي ما هي 𝟑 = 𝟏𝟏 𝒉 ሺ𝟗𝟎𝟏ሻ = 𝟗𝟎𝟏 % هنضيف رقم 901 في الخانة رقم 3 10 9 8 7 𝟗𝟑 6 5 4 𝟏𝟎𝟗 3 𝟔𝟒 2 𝟒𝟑 1 0 خزنا رابع قيمة ...نخزن خامس قيمة بقى اللي هي رقم 815 يعني هنعوض عن ال Keyب 815 و هنعوض عن ال lengthب 11زيي ما هي 𝟏 = 𝟏𝟏 𝒉 ሺ𝟖𝟏𝟓ሻ = 𝟖𝟏𝟓 % هنضيف رقم 815 في الخانة رقم 1 طيب هنضيفها ازاي جمب القيمة األولى دي ؟! هنيجي عند الخانة اللي هنخزن فيها الرقم : و هنضيف مستطيل جديد ..يعني كده : هيبقى شكلها كده بعد ما نخزن رقم : 815 10 9 8 7 𝟗𝟑 6 5 4 𝟏𝟎𝟗 3 𝟔𝟒 2 𝟓𝟏𝟖 𝟒𝟑 1 0 خزنا خامس قيمة ...نخزن سادس و اخر قيمة بقى اللي هي رقم 67 يعني هنعوض عن ال Keyب 67 و هنعوض عن ال lengthب 11زيي ما هي 𝟏 = 𝟏𝟏 𝒉 ሺ𝟔𝟕ሻ = 𝟔𝟕 % هنضيف رقم 67 في الخانة رقم 1 10 9 8 7 𝟗𝟑 6 5 4 𝟏𝟎𝟗 3 𝟔𝟒 2 𝟕𝟔 𝟓𝟏𝟖 𝟒𝟑 1 0