All language subtitles for Hash tables

af Afrikaans
sq Albanian
am Amharic
ar Arabic Download
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:00,000 --> 00:00:00,500 غير معرف 2 00:00:00,500 --> 00:00:01,900 [عزف الموسيقى] 3 00:00:01,900 --> 00:00:05,710 غير معرف 4 00:00:05,710 --> 00:00:09,150 >> دوغ لويد: الآن تعرف الكثير عن المصفوفات ، 5 00:00:09,150 --> 00:00:11,610 وأنت تعرف الكثير عن القوائم المرتبطة. 6 00:00:11,610 --> 00:00:13,650 وقد ناقشنا الإيجابيات والسلبيات ، لقد قمنا بذلك 7 00:00:13,650 --> 00:00:16,620 ناقش أن القوائم المرتبطة يمكن أن تصبح أكبر وأصغر ، 8 00:00:16,620 --> 00:00:18,630 لكنها تأخذ حجمًا أكبر. 9 00:00:18,630 --> 00:00:22,359 المصفوفات أكثر سهولة في الاستخدام ، لكنها مقيدة في نفس القدر 10 00:00:22,359 --> 00:00:24,900 حيث يتعين علينا ضبط حجم المصفوفة في البداية 11 00:00:24,900 --> 00:00:26,910 ومن ثم نحن عالقون معها. 12 00:00:26,910 --> 00:00:30,470 >> ولكن هذا ، لقد استنفدنا إلى حد كبير جميع موضوعاتنا 13 00:00:30,470 --> 00:00:33,040 حول القوائم والمصفوفات المرتبطة. 14 00:00:33,040 --> 00:00:34,950 أم لدينا؟ 15 00:00:34,950 --> 00:00:37,720 ربما يمكننا القيام بشيء أكثر إبداعًا. 16 00:00:37,720 --> 00:00:40,950 وهذا النوع من فكرة جدول التجزئة. 17 00:00:40,950 --> 00:00:46,680 >> لذلك في جدول التجزئة سنحاول دمج مصفوفة مع قائمة مرتبطة. 18 00:00:46,680 --> 00:00:49,520 سنستفيد من مزايا المصفوفة ، مثل الوصول العشوائي ، 19 00:00:49,520 --> 00:00:53,510 القدرة على الانتقال إلى عنصر المصفوفة 4 أو عنصر المصفوفة 8 20 00:00:53,510 --> 00:00:55,560 دون الحاجة إلى تكرار ذلك عبر. 21 00:00:55,560 --> 00:00:57,260 هذا سريع جدًا ، أليس كذلك؟ 22 00:00:57,260 --> 00:01:00,714 >> ولكننا نريد أيضًا أن تكون بنية بياناتنا قادرة على النمو والانكماش. 23 00:01:00,714 --> 00:01:02,630 لسنا بحاجة ، لا نريد أن نكون مقيدين. 24 00:01:02,630 --> 00:01:04,588 ونريد أن نكون قادرين على إضافة وإزالة الأشياء 25 00:01:04,588 --> 00:01:08,430 بسهولة شديدة ، والتي إذا كنت تتذكرها ، فهي معقدة للغاية مع مصفوفة. 26 00:01:08,430 --> 00:01:11,650 ويمكننا تسمية هذا الشيء الجديد بجدول التجزئة. 27 00:01:11,650 --> 00:01:15,190 >> وإذا تم تنفيذها بشكل صحيح ، فإننا نوعا ما نأخذ 28 00:01:15,190 --> 00:01:18,150 مزايا بنيتي البيانات التي رأيتها بالفعل ، 29 00:01:18,150 --> 00:01:19,880 المصفوفات والقوائم المرتبطة. 30 00:01:19,880 --> 00:01:23,070 يمكن أن يبدأ الإدراج في الميل نحو ثيتا 1. 31 00:01:23,070 --> 00:01:26,207 ثيتا لم نناقشها حقًا ، لكن ثيتا هي مجرد حالة عادية ، 32 00:01:26,207 --> 00:01:27,540 ما الذي سيحدث بالفعل. 33 00:01:27,540 --> 00:01:29,680 لن يكون لديك دائمًا أسوأ سيناريو ، 34 00:01:29,680 --> 00:01:32,555 ولن يكون لديك دائمًا أفضل سيناريو ، فما هو 35 00:01:32,555 --> 00:01:33,900 السيناريو المتوسط؟ 36 00:01:33,900 --> 00:01:36,500 >> حسنًا ، متوسط ​​الإدراج في جدول التجزئة 37 00:01:36,500 --> 00:01:39,370 يمكن أن تبدأ في الاقتراب من الوقت الثابت. 38 00:01:39,370 --> 00:01:41,570 ويمكن أن يقترب الحذف من الوقت الثابت. 39 00:01:41,570 --> 00:01:44,440 ويمكن أن يقترب البحث من الوقت الثابت. 40 00:01:44,440 --> 00:01:48,600 هذا - ليس لدينا بنية بيانات حتى الآن يمكنها القيام بذلك ، 41 00:01:48,600 --> 00:01:51,180 ولذا يبدو هذا بالفعل شيئًا رائعًا جدًا. 42 00:01:51,180 --> 00:01:57,010 لقد قمنا بالفعل بتخفيف عيوب كل منها بمفردها. 43 00:01:57,010 --> 00:01:59,160 >> للحصول على ترقية الأداء هذه ، نحن 44 00:01:59,160 --> 00:02:03,580 بحاجة إلى إعادة التفكير في كيفية إضافة البيانات إلى الهيكل. 45 00:02:03,580 --> 00:02:07,380 على وجه التحديد ، نريد أن تخبرنا البيانات نفسها 46 00:02:07,380 --> 00:02:09,725 حيث يجب أن تذهب في الهيكل. 47 00:02:09,725 --> 00:02:12,850 وإذا احتجنا بعد ذلك إلى معرفة ما إذا كان موجودًا في الهيكل ، وإذا أردنا العثور عليه ، 48 00:02:12,850 --> 00:02:16,610 نريد أن ننظر إلى البيانات مرة أخرى وأن نكون قادرين على 49 00:02:16,610 --> 00:02:18,910 باستخدام البيانات ، والوصول إليها بشكل عشوائي. 50 00:02:18,910 --> 00:02:20,700 فقط من خلال النظر إلى البيانات التي يجب أن تكون لدينا 51 00:02:20,700 --> 00:02:25,890 فكرة عن المكان الذي سنجده فيه بالضبط في جدول التجزئة. 52 00:02:25,890 --> 00:02:28,770 >> الآن الجانب السلبي لجدول التجزئة هو أنهم حقًا 53 00:02:28,770 --> 00:02:31,770 سيء جدًا في طلب البيانات أو فرزها. 54 00:02:31,770 --> 00:02:34,970 وفي الواقع ، إذا بدأت في استخدامها للطلب أو الفرز 55 00:02:34,970 --> 00:02:37,990 البيانات تفقد كل المزايا التي كنت تمتلكها سابقًا 56 00:02:37,990 --> 00:02:40,710 كان من حيث الإدراج والحذف. 57 00:02:40,710 --> 00:02:44,060 أصبح الوقت أقرب إلى ثيتا n ، ونحن في الأساس 58 00:02:44,060 --> 00:02:45,530 تراجعت إلى قائمة مرتبطة. 59 00:02:45,530 --> 00:02:48,850 ولذا فنحن نريد فقط استخدام جداول التجزئة إذا لم نهتم بذلك 60 00:02:48,850 --> 00:02:51,490 سواء تم فرز البيانات. 61 00:02:51,490 --> 00:02:54,290 للسياق الذي ستستخدمهم فيه في CS50 62 00:02:54,290 --> 00:02:58,900 ربما لا تهتم بفرز البيانات. 63 00:02:58,900 --> 00:03:03,170 >> إذن جدول التجزئة عبارة عن مزيج من قطعتين متميزتين 64 00:03:03,170 --> 00:03:04,980 التي نعرفها. 65 00:03:04,980 --> 00:03:07,930 الأولى هي دالة ، نسميها عادة دالة هاش. 66 00:03:07,930 --> 00:03:11,760 وستقوم دالة التجزئة هذه بإرجاع بعض الأعداد الصحيحة غير السالبة ، والتي 67 00:03:11,760 --> 00:03:14,870 نحن عادة نسمي رمز التجزئة ، حسنا؟ 68 00:03:14,870 --> 00:03:20,230 القطعة الثانية عبارة عن مصفوفة قادرة على تخزين البيانات من النوع نحن 69 00:03:20,230 --> 00:03:22,190 تريد وضعها في بنية البيانات. 70 00:03:22,190 --> 00:03:24,310 سنقوم بتأجيل عنصر القائمة المرتبطة في الوقت الحالي 71 00:03:24,310 --> 00:03:27,810 وابدأ فقط بأساسيات جدول التجزئة لتجعلك تدور حوله ، 72 00:03:27,810 --> 00:03:30,210 وبعد ذلك ربما نفجر عقلك قليلاً عندما نفعل ذلك 73 00:03:30,210 --> 00:03:32,920 الجمع بين المصفوفات وربط القوائم معًا. 74 00:03:32,920 --> 00:03:35,590 >> الفكرة الأساسية هي أننا نأخذ بعض البيانات. 75 00:03:35,590 --> 00:03:37,860 نقوم بتشغيل تلك البيانات من خلال وظيفة التجزئة. 76 00:03:37,860 --> 00:03:41,980 وهكذا تتم معالجة البيانات وتخرج رقمًا ، حسنًا؟ 77 00:03:41,980 --> 00:03:44,890 ثم باستخدام هذا الرقم ، نقوم فقط بتخزين البيانات 78 00:03:44,890 --> 00:03:48,930 نريد تخزينها في المصفوفة في ذلك الموقع. 79 00:03:48,930 --> 00:03:53,990 على سبيل المثال ، ربما يكون لدينا جدول تجزئة للسلاسل. 80 00:03:53,990 --> 00:03:57,350 يحتوي على 10 عناصر فيه ، لذا يمكننا احتواء 10 سلاسل فيه. 81 00:03:57,350 --> 00:03:59,320 >> لنفترض أننا نريد تجزئة جون. 82 00:03:59,320 --> 00:04:02,979 إذن جون كالبيانات التي نريد إدراجها في جدول التجزئة هذا في مكان ما. 83 00:04:02,979 --> 00:04:03,770 أين نضعها؟ 84 00:04:03,770 --> 00:04:05,728 حسنًا ، عادةً مع مصفوفة حتى الآن ربما 85 00:04:05,728 --> 00:04:07,610 سيضعها في موقع الصفيف 0. 86 00:04:07,610 --> 00:04:09,960 لكن لدينا الآن وظيفة التجزئة الجديدة هذه. 87 00:04:09,960 --> 00:04:13,180 >> ولنفترض أننا نجحنا في تشغيل John من خلال دالة التجزئة هذه 88 00:04:13,180 --> 00:04:15,417 وهو يبصق 4. 89 00:04:15,417 --> 00:04:17,500 حسنًا ، هذا هو المكان الذي نريد وضع جون فيه. 90 00:04:17,500 --> 00:04:22,050 نريد وضع John في موقع المصفوفة 4 ، لأننا إذا قمنا بتجزئة John مرة أخرى-- 91 00:04:22,050 --> 00:04:23,810 دعنا نقول لاحقًا أننا نريد البحث والاطلاع 92 00:04:23,810 --> 00:04:26,960 إذا كان جون موجودًا في جدول التجزئة هذا - كل ما يتعين علينا القيام به 93 00:04:26,960 --> 00:04:30,310 يتم تشغيله من خلال نفس دالة التجزئة ، والحصول على الرقم 4 ، 94 00:04:30,310 --> 00:04:33,929 والتمكن من العثور على John على الفور في بنية البيانات لدينا. 95 00:04:33,929 --> 00:04:34,720 انها فعلا جميلة. 96 00:04:34,720 --> 00:04:36,928 >> لنفترض أننا نفعل ذلك الآن مرة أخرى ، نريد تجزئة بول. 97 00:04:36,928 --> 00:04:39,446 نريد إضافة بول إلى جدول التجزئة هذا. 98 00:04:39,446 --> 00:04:42,070 لنفترض أننا نجحنا هذه المرة في تشغيل Paul من خلال دالة التجزئة ، 99 00:04:42,070 --> 00:04:44,600 كود التجزئة الذي تم إنشاؤه هو 6. 100 00:04:44,600 --> 00:04:47,340 حسنًا ، يمكننا الآن وضع بول في موقع المصفوفة 6. 101 00:04:47,340 --> 00:04:50,040 وإذا احتجنا إلى البحث عما إذا كان بول موجودًا في جدول التجزئة هذا ، 102 00:04:50,040 --> 00:04:53,900 كل ما علينا فعله هو تشغيل Paul من خلال دالة التجزئة مرة أخرى 103 00:04:53,900 --> 00:04:55,830 وسنخرج 6 مرة أخرى. 104 00:04:55,830 --> 00:04:57,590 >> وبعد ذلك ننظر فقط إلى موقع المصفوفة 6. 105 00:04:57,590 --> 00:04:58,910 هل بولس هناك؟ 106 00:04:58,910 --> 00:05:00,160 إذا كان الأمر كذلك ، فهو في طاولة التجزئة. 107 00:05:00,160 --> 00:05:01,875 أليس بولس هناك؟ 108 00:05:01,875 --> 00:05:03,000 إنه ليس في طاولة التجزئة. 109 00:05:03,000 --> 00:05:05,720 إنه أمر بسيط ومباشر. 110 00:05:05,720 --> 00:05:07,770 >> الآن كيف تحدد دالة التجزئة؟ 111 00:05:07,770 --> 00:05:11,460 حسنًا ، ليس هناك حد لعدد وظائف التجزئة الممكنة. 112 00:05:11,460 --> 00:05:14,350 في الواقع ، هناك عدد من الأشياء الجيدة حقًا على الإنترنت. 113 00:05:14,350 --> 00:05:17,560 هناك عدد من الأشياء السيئة حقًا على الإنترنت. 114 00:05:17,560 --> 00:05:21,080 من السهل أيضًا كتابة كلمة سيئة. 115 00:05:21,080 --> 00:05:23,760 >> إذن ما الذي تتكون منه دالة تجزئة جيدة ، أليس كذلك؟ 116 00:05:23,760 --> 00:05:27,280 حسنًا ، يجب أن تستخدم دالة التجزئة الجيدة البيانات التي يتم تجزئتها فقط ، 117 00:05:27,280 --> 00:05:29,420 وجميع البيانات التي يتم تجزئتها. 118 00:05:29,420 --> 00:05:32,500 لذلك لا نريد استخدام أي شيء - نحن لا ندمج أي شيء 119 00:05:32,500 --> 00:05:35,560 بخلاف البيانات. 120 00:05:35,560 --> 00:05:37,080 ونريد استخدام كل البيانات. 121 00:05:37,080 --> 00:05:39,830 لا نريد استخدام جزء منه فقط ، نريد استخدام كل ذلك. 122 00:05:39,830 --> 00:05:41,710 يجب أن تكون دالة التجزئة حتمية أيضًا. 123 00:05:41,710 --> 00:05:42,550 ماذا يعني ذلك؟ 124 00:05:42,550 --> 00:05:46,200 حسنًا ، هذا يعني أنه في كل مرة نمرر فيها نفس قطعة البيانات بالضبط 125 00:05:46,200 --> 00:05:50,040 في وظيفة التجزئة ، نحصل دائمًا على نفس رمز التجزئة. 126 00:05:50,040 --> 00:05:52,870 إذا قمت بتمرير John إلى دالة التجزئة ، سأخرج 4. 127 00:05:52,870 --> 00:05:56,110 يجب أن أكون قادرًا على القيام بذلك 10000 مرة وسأحصل دائمًا على 4. 128 00:05:56,110 --> 00:06:00,810 لذلك لا يمكن تضمين أي أرقام عشوائية بشكل فعال في جداول التجزئة لدينا-- 129 00:06:00,810 --> 00:06:02,750 في وظائف التجزئة لدينا. 130 00:06:02,750 --> 00:06:05,750 >> يجب أن تقوم دالة التجزئة أيضًا بتوزيع البيانات بشكل موحد. 131 00:06:05,750 --> 00:06:09,700 إذا في كل مرة تقوم فيها بتشغيل البيانات من خلال وظيفة التجزئة ، تحصل على رمز التجزئة 0 ، 132 00:06:09,700 --> 00:06:11,200 ربما هذا ليس رائعًا ، أليس كذلك؟ 133 00:06:11,200 --> 00:06:14,600 ربما تريد زيادة مجموعة أكواد التجزئة. 134 00:06:14,600 --> 00:06:17,190 يمكن أيضًا توزيع الأشياء في جميع أنحاء الطاولة. 135 00:06:17,190 --> 00:06:23,210 وسيكون رائعًا أيضًا إذا كانت البيانات المتشابهة حقًا ، مثل جون وجوناثان ، 136 00:06:23,210 --> 00:06:26,320 ربما تم توزيعها لوزن مواقع مختلفة في جدول التجزئة. 137 00:06:26,320 --> 00:06:28,750 سيكون ذلك ميزة جيدة. 138 00:06:28,750 --> 00:06:31,250 >> هنا مثال لدالة التجزئة. 139 00:06:31,250 --> 00:06:33,150 لقد كتبت هذا في وقت سابق. 140 00:06:33,150 --> 00:06:35,047 إنها ليست دالة تجزئة جيدة بشكل خاص 141 00:06:35,047 --> 00:06:37,380 لأسباب لا تحتمل الدخول في الوقت الحالي. 142 00:06:37,380 --> 00:06:41,040 لكن هل ترى ما يحدث هنا؟ 143 00:06:41,040 --> 00:06:44,420 يبدو أننا نعلن عن متغير يسمى sum ونضبطه على 0. 144 00:06:44,420 --> 00:06:50,010 ومن ثم يبدو أنني أفعل شيئًا طالما أن strstr [j] غير متساوٍ 145 00:06:50,010 --> 00:06:52,490 للشرطة المائلة للخلف 0. 146 00:06:52,490 --> 00:06:54,870 ماذا أفعل هناك؟ 147 00:06:54,870 --> 00:06:57,440 >> هذه في الأساس مجرد طريقة أخرى للتنفيذ [؟ strl؟] 148 00:06:57,440 --> 00:06:59,773 واكتشاف وصولك إلى نهاية السلسلة. 149 00:06:59,773 --> 00:07:02,480 لذلك لا يتعين علي حساب طول السلسلة ، 150 00:07:02,480 --> 00:07:05,640 أنا أستخدم فقط عندما أصبت بشرطة مائلة عكسية 0 حرف أعرفه 151 00:07:05,640 --> 00:07:07,185 لقد وصلت إلى نهاية السلسلة. 152 00:07:07,185 --> 00:07:09,560 وبعد ذلك سأستمر في التكرار خلال تلك السلسلة ، 153 00:07:09,560 --> 00:07:15,310 إضافة strstr [j] للمجموع ، ثم في نهاية اليوم ستعيد المجموع mod 154 00:07:15,310 --> 00:07:16,200 HASH_MAX. 155 00:07:16,200 --> 00:07:18,700 >> في الأساس كل ما تقوم به دالة التجزئة هو الجمع 156 00:07:18,700 --> 00:07:23,450 كل قيم ASCII لسلسلتي ، وبعد ذلك 157 00:07:23,450 --> 00:07:26,390 إرجاع بعض رمز التجزئة المعدل بواسطة HASH_MAX. 158 00:07:26,390 --> 00:07:29,790 ربما يكون حجم صفيفتي ، أليس كذلك؟ 159 00:07:29,790 --> 00:07:33,160 لا أريد الحصول على أكواد التجزئة إذا كان حجم مصفوفي 10 ، 160 00:07:33,160 --> 00:07:35,712 لا أريد الحصول على رموز التجزئة 11 ، 12 ، 161 00:07:35,712 --> 00:07:38,690 13 ، لا يمكنني وضع الأشياء في تلك المواقع من المصفوفة ، 162 00:07:38,690 --> 00:07:39,790 سيكون ذلك غير قانوني. 163 00:07:39,790 --> 00:07:42,130 كنت أعاني من خطأ تجزئة. 164 00:07:42,130 --> 00:07:45,230 >> الآن هنا جانب سريع آخر. 165 00:07:45,230 --> 00:07:48,470 بشكل عام ، ربما لن ترغب في كتابة وظائف التجزئة الخاصة بك. 166 00:07:48,470 --> 00:07:50,997 إنه في الواقع نوع من الفن وليس علمًا. 167 00:07:50,997 --> 00:07:52,580 وهناك الكثير من الأمور التي تتعلق بهم. 168 00:07:52,580 --> 00:07:55,288 الإنترنت ، كما قلت ، مليء بوظائف التجزئة الجيدة حقًا ، 169 00:07:55,288 --> 00:07:58,470 ويجب عليك استخدام الإنترنت للعثور على وظائف التجزئة لأنها حقًا 170 00:07:58,470 --> 00:08:03,230 مجرد نوع من مضيعة غير ضرورية للوقت لإنشاء وقتك الخاص. 171 00:08:03,230 --> 00:08:05,490 >> يمكنك كتابة أشياء بسيطة لأغراض الاختبار. 172 00:08:05,490 --> 00:08:08,323 ولكن عندما تبدأ بالفعل في تجزئة البيانات وتخزينها 173 00:08:08,323 --> 00:08:10,780 في جدول التجزئة الذي ربما تريده 174 00:08:10,780 --> 00:08:14,580 لاستخدام بعض الوظائف التي تم إنشاؤها من أجلك ، والموجودة على الإنترنت. 175 00:08:14,580 --> 00:08:17,240 إذا كنت تفعل ذلك فقط تأكد من الاستشهاد بمصادرك. 176 00:08:17,240 --> 00:08:21,740 لا يوجد سبب لسرقة أي شيء هنا. 177 00:08:21,740 --> 00:08:25,370 >> مجتمع علوم الكمبيوتر ينمو بالتأكيد ، ويقدر حقًا 178 00:08:25,370 --> 00:08:28,796 مفتوح المصدر ، ومن المهم حقًا الاستشهاد بمصادرك حتى يتمكن الأشخاص من ذلك 179 00:08:28,796 --> 00:08:30,670 يمكنهم الحصول على الإسناد للعمل الذي يقومون به 180 00:08:30,670 --> 00:08:32,312 تفعل لصالح المجتمع. 181 00:08:32,312 --> 00:08:34,020 لذلك تأكد دائمًا - وليس فقط للتجزئة 182 00:08:34,020 --> 00:08:37,270 الوظائف ، ولكن بشكل عام عندما تستخدم رمزًا من مصدر خارجي ، 183 00:08:37,270 --> 00:08:38,299 اذكر مصدرك دائمًا. 184 00:08:38,299 --> 00:08:43,500 امنح الفضل للشخص الذي قام ببعض الأعمال حتى لا تضطر إلى ذلك. 185 00:08:43,500 --> 00:08:46,720 >> حسنًا ، فلنراجع جدول التجزئة هذا لمدة ثانية. 186 00:08:46,720 --> 00:08:48,780 هذا هو المكان الذي توقفنا فيه بعد أن أدخلنا 187 00:08:48,780 --> 00:08:53,300 يوحنا وبولس في جدول التجزئة هذا. 188 00:08:53,300 --> 00:08:55,180 هل ترى مشكلة هنا؟ 189 00:08:55,180 --> 00:08:58,410 قد ترى اثنين. 190 00:08:58,410 --> 00:09:02,240 لكن على وجه الخصوص ، هل ترى هذه المشكلة المحتملة؟ 191 00:09:02,240 --> 00:09:06,770 >> ماذا لو قمت بتجزئة Ringo ، واتضح ذلك بعد المعالجة 192 00:09:06,770 --> 00:09:14,000 تلك البيانات من خلال وظيفة التجزئة قام Ringo أيضًا بإنشاء رمز التجزئة 6. 193 00:09:14,000 --> 00:09:16,810 لقد حصلت بالفعل على بيانات في رمز التجزئة - موقع الصفيف 6. 194 00:09:16,810 --> 00:09:22,000 لذا من المحتمل أن تكون مشكلة بالنسبة لي الآن ، أليس كذلك؟ 195 00:09:22,000 --> 00:09:23,060 >> نسمي هذا تصادمًا. 196 00:09:23,060 --> 00:09:26,460 ويحدث التصادم عندما يتم تشغيل قطعتين من البيانات عبر نفس التجزئة 197 00:09:26,460 --> 00:09:29,200 وظيفة تؤدي إلى نفس رمز التجزئة. 198 00:09:29,200 --> 00:09:32,850 من المفترض أننا ما زلنا نرغب في إدخال كلا الجزأين من البيانات في جدول التجزئة ، 199 00:09:32,850 --> 00:09:36,330 وإلا فلن نقوم بتشغيل Ringo بشكل تعسفي من خلال وظيفة التجزئة. 200 00:09:36,330 --> 00:09:40,870 من المفترض أننا نريد إدخال رينغو في تلك المجموعة. 201 00:09:40,870 --> 00:09:46,070 >> كيف يمكننا القيام بذلك ، إذا قدم هو وبولس رمز التجزئة 6؟ 202 00:09:46,070 --> 00:09:49,520 لا نريد استبدال بول ، نريد أن يكون بولس هناك أيضًا. 203 00:09:49,520 --> 00:09:52,790 لذلك نحن بحاجة إلى إيجاد طريقة لإدخال العناصر في جدول التجزئة 204 00:09:52,790 --> 00:09:56,550 لا يزال يحافظ على الإدراج السريع والبحث السريع. 205 00:09:56,550 --> 00:10:01,350 وإحدى طرق التعامل معها هي القيام بشيء يسمى التحقيق الخطي. 206 00:10:01,350 --> 00:10:04,170 >> باستخدام هذه الطريقة إذا حدث تصادم ، حسنًا ، ماذا نفعل؟ 207 00:10:04,170 --> 00:10:08,580 حسنًا ، لا يمكننا وضعه في موقع المصفوفة 6 ، أو أي كود تجزئة تم إنشاؤه ، 208 00:10:08,580 --> 00:10:10,820 دعنا نضعه في hashcode زائد 1. 209 00:10:10,820 --> 00:10:13,670 وإذا كان هذا ممتلئًا ، فلنضعه في رمز التجزئة زائد 2. 210 00:10:13,670 --> 00:10:17,420 فائدة هذا الوجود إذا لم يكن بالضبط حيث نعتقد أنه موجود ، 211 00:10:17,420 --> 00:10:20,850 وعلينا أن نبدأ البحث ، ربما لا نضطر إلى الذهاب بعيدًا. 212 00:10:20,850 --> 00:10:23,900 ربما لا يتعين علينا البحث في جميع العناصر n لجدول التجزئة. 213 00:10:23,900 --> 00:10:25,790 ربما يتعين علينا البحث عن اثنين منهم. 214 00:10:25,790 --> 00:10:30,680 >> ولذا فنحن ما زلنا نتجه نحو اقتراب متوسط ​​الحالة هذا من 1 مقابل 215 00:10:30,680 --> 00:10:34,280 قريب من n ، لذلك ربما سيعمل ذلك. 216 00:10:34,280 --> 00:10:38,010 لذلك دعونا نرى كيف يمكن أن يحدث هذا في الواقع. 217 00:10:38,010 --> 00:10:41,460 ودعونا نرى ما إذا كان بإمكاننا اكتشاف المشكلة التي قد تحدث هنا. 218 00:10:41,460 --> 00:10:42,540 >> دعنا نقول أننا هاش بارت. 219 00:10:42,540 --> 00:10:45,581 سنقوم الآن بتشغيل مجموعة جديدة من السلاسل من خلال دالة التجزئة ، 220 00:10:45,581 --> 00:10:48,460 ونقوم بتشغيل Bart من خلال دالة التجزئة ، نحصل على رمز التجزئة 6. 221 00:10:48,460 --> 00:10:52,100 نلقي نظرة ، نرى 6 فارغة ، لذا يمكننا وضع بارت هناك. 222 00:10:52,100 --> 00:10:55,410 >> الآن قمنا بتجزئة ليزا وهذا أيضًا يولد رمز التجزئة 6. 223 00:10:55,410 --> 00:10:58,330 حسنًا ، بعد أن استخدمنا طريقة الفحص الخطية هذه ، نبدأ من 6 ، 224 00:10:58,330 --> 00:10:59,330 نرى أن 6 ممتلئة. 225 00:10:59,330 --> 00:11:00,990 لا يمكننا وضع ليزا في الرقم 6. 226 00:11:00,990 --> 00:11:02,090 إذن، أين نذهب؟ 227 00:11:02,090 --> 00:11:03,280 دعنا ننتقل إلى 7. 228 00:11:03,280 --> 00:11:04,610 رقم 7 فارغ ، لذلك يعمل. 229 00:11:04,610 --> 00:11:06,510 لذلك دعونا نضع ليزا هناك. 230 00:11:06,510 --> 00:11:10,200 >> الآن قمنا بتجزئة هومر ونحصل على 7. 231 00:11:10,200 --> 00:11:13,380 حسنًا ، نعلم جيدًا أن الرقم 7 ممتلئ الآن ، لذا لا يمكننا وضع هومر هناك. 232 00:11:13,380 --> 00:11:14,850 فلننتقل إلى 8. 233 00:11:14,850 --> 00:11:15,664 8 متاح؟ 234 00:11:15,664 --> 00:11:18,330 نعم ، و 8 تقترب من 7 ، لذلك إذا كان علينا بدء البحث ، فنحن 235 00:11:18,330 --> 00:11:20,020 لن تضطر إلى الذهاب بعيدا. 236 00:11:20,020 --> 00:11:22,860 لذلك دعونا نضع هومر في المرتبة الثامنة. 237 00:11:22,860 --> 00:11:25,151 >> الآن نقوم بتجزئة ماجي وإرجاع 3 ، الحمد لله 238 00:11:25,151 --> 00:11:26,650 يمكننا فقط وضع ماجي هناك. 239 00:11:26,650 --> 00:11:29,070 لا يتعين علينا القيام بأي نوع من التحقيق في ذلك. 240 00:11:29,070 --> 00:11:32,000 الآن نقوم بتجزئة Marge ، وترجع Marge أيضًا 6. 241 00:11:32,000 --> 00:11:39,560 >> حسنًا 6 ممتلئ ، 7 ممتلئ ، 8 ممتلئ ، 9 ، حسنًا الحمد لله ، 9 فارغ. 242 00:11:39,560 --> 00:11:41,600 يمكنني وضع مارج في التاسعة. 243 00:11:41,600 --> 00:11:45,280 بالفعل يمكننا أن نرى أننا بدأنا نواجه هذه المشكلة حيث نحن الآن 244 00:11:45,280 --> 00:11:48,780 البدء في تمديد الأشياء بعيدًا عن أكواد التجزئة الخاصة بهم. 245 00:11:48,780 --> 00:11:52,960 وأن ثيتا 1 ، تلك الحالة المتوسطة لكونها وقتًا ثابتًا ، 246 00:11:52,960 --> 00:11:56,560 بدأ في الحصول على المزيد - بدأ يميل أكثر قليلاً 247 00:11:56,560 --> 00:11:58,050 نحو ثيتا من ن. 248 00:11:58,050 --> 00:12:01,270 لقد بدأنا نفقد ميزة جداول التجزئة. 249 00:12:01,270 --> 00:12:03,902 >> هذه المشكلة التي رأيناها للتو تسمى التجميع. 250 00:12:03,902 --> 00:12:06,360 والشيء السيئ حقًا في التجميع هو أنك مرة واحدة الآن 251 00:12:06,360 --> 00:12:09,606 وجود عنصرين جنبًا إلى جنب مما يزيد من احتمالية حدوثه ، 252 00:12:09,606 --> 00:12:11,480 لديك فرصة مضاعفة ، أنك ذاهب 253 00:12:11,480 --> 00:12:13,516 لتصادم آخر مع تلك المجموعة ، 254 00:12:13,516 --> 00:12:14,890 وسوف تنمو الكتلة بواحد. 255 00:12:14,890 --> 00:12:19,640 وستستمر في النمو وزيادة احتمالية حدوث تصادم. 256 00:12:19,640 --> 00:12:24,470 وفي النهاية يكون الأمر سيئًا مثل عدم فرز البيانات على الإطلاق. 257 00:12:24,470 --> 00:12:27,590 >> لكن المشكلة الأخرى هي أننا ما زلنا ، وحتى الآن حتى هذه اللحظة ، 258 00:12:27,590 --> 00:12:30,336 لقد فهمنا نوعًا ما ما هو جدول التجزئة ، 259 00:12:30,336 --> 00:12:31,960 لا يزال لدينا متسع لـ 10 سلاسل فقط. 260 00:12:31,960 --> 00:12:37,030 إذا أردنا الاستمرار في تجزئة مواطني سبرينغفيلد ، 261 00:12:37,030 --> 00:12:38,790 يمكننا فقط الحصول على 10 منهم هناك. 262 00:12:38,790 --> 00:12:42,619 وإذا حاولنا إضافة 11 أو 12 ، فليس لدينا مكان لوضعهما. 263 00:12:42,619 --> 00:12:45,660 يمكننا فقط أن نلتف في دوائر نحاول إيجاد مكان فارغ ، 264 00:12:45,660 --> 00:12:49,000 وربما نتعثر في حلقة لا نهائية. 265 00:12:49,000 --> 00:12:51,810 >> لذا فإن هذا النوع من الإقراض لفكرة شيء يسمى التسلسل. 266 00:12:51,810 --> 00:12:55,790 وهذا هو المكان الذي سنقوم فيه بإعادة القوائم المرتبطة إلى الصورة. 267 00:12:55,790 --> 00:13:01,300 ماذا لو بدلاً من تخزين البيانات نفسها في المصفوفة ، 268 00:13:01,300 --> 00:13:04,471 يمكن أن يحتوي كل عنصر من عناصر المصفوفة على أجزاء متعددة من البيانات؟ 269 00:13:04,471 --> 00:13:05,970 حسنًا ، هذا غير منطقي ، أليس كذلك؟ 270 00:13:05,970 --> 00:13:09,280 نحن نعلم أن المصفوفة يمكن أن تحتوي فقط - كل عنصر من عناصر المصفوفة 271 00:13:09,280 --> 00:13:12,930 يمكن أن تحتوي على جزء واحد فقط من البيانات من هذا النوع من البيانات. 272 00:13:12,930 --> 00:13:16,750 >> ولكن ماذا لو كان نوع البيانات هذا عبارة عن قائمة مرتبطة ، أليس كذلك؟ 273 00:13:16,750 --> 00:13:19,830 فماذا لو كان كل عنصر من عناصر المصفوفة 274 00:13:19,830 --> 00:13:22,790 مؤشر إلى رأس قائمة مرتبطة؟ 275 00:13:22,790 --> 00:13:24,680 وبعد ذلك يمكننا بناء تلك القوائم المرتبطة 276 00:13:24,680 --> 00:13:27,120 وتنميتها بشكل تعسفي ، لأن القوائم المرتبطة تسمح بذلك 277 00:13:27,120 --> 00:13:32,090 علينا أن ننمو ونتقلص بمرونة أكبر بكثير من المصفوفة. 278 00:13:32,090 --> 00:13:34,210 إذن ماذا لو استخدمنا الآن ، استفدنا من هذا ، أليس كذلك؟ 279 00:13:34,210 --> 00:13:37,760 نبدأ في تنمية هذه السلاسل خارج مواقع المصفوفة هذه. 280 00:13:37,760 --> 00:13:40,740 >> يمكننا الآن استيعاب كمية لا حصر لها من البيانات ، أو غير محدودة ، 281 00:13:40,740 --> 00:13:44,170 كمية عشوائية من البيانات ، في جدول التجزئة الخاص بنا 282 00:13:44,170 --> 00:13:47,760 دون الوقوع في مشكلة الاصطدام. 283 00:13:47,760 --> 00:13:50,740 لقد أزلنا أيضًا التجميع من خلال القيام بذلك. 284 00:13:50,740 --> 00:13:54,380 ونعلم جيدًا أنه عندما ندرج في قائمة مرتبطة ، إذا كنت تتذكر 285 00:13:54,380 --> 00:13:57,779 من الفيديو الخاص بنا في القوائم المرتبطة والقوائم المرتبطة بشكل فردي والقوائم المرتبطة بشكل مضاعف ، 286 00:13:57,779 --> 00:13:59,070 إنها عملية زمنية ثابتة. 287 00:13:59,070 --> 00:14:00,710 نحن فقط نضيف إلى المقدمة. 288 00:14:00,710 --> 00:14:04,400 >> وللبحث ، نحن نعلم جيدًا أن البحث في قائمة مرتبطة 289 00:14:04,400 --> 00:14:05,785 يمكن أن يكون مشكلة ، أليس كذلك؟ 290 00:14:05,785 --> 00:14:07,910 علينا البحث من خلاله من البداية إلى النهاية. 291 00:14:07,910 --> 00:14:10,460 لا يوجد وصول عشوائي في قائمة مرتبطة. 292 00:14:10,460 --> 00:14:15,610 ولكن إذا بدلاً من وجود قائمة مرتبطة واحدة حيث يكون البحث هو O لـ n ، 293 00:14:15,610 --> 00:14:19,590 لدينا الآن 10 قوائم مرتبطة ، أو 1000 قائمة مرتبطة ، 294 00:14:19,590 --> 00:14:24,120 الآن هو O لـ n مقسومًا على 10 ، أو O لـ n مقسومًا على 1000. 295 00:14:24,120 --> 00:14:26,940 >> وبينما كنا نتحدث نظريًا عن التعقيد 296 00:14:26,940 --> 00:14:30,061 نتجاهل الثوابت ، فهذه الأشياء مهمة في الواقع ، 297 00:14:30,061 --> 00:14:30,560 الصحيح؟ 298 00:14:30,560 --> 00:14:33,080 في الواقع سوف نلاحظ أن هذا يحدث 299 00:14:33,080 --> 00:14:36,610 لتشغيل أسرع 10 مرات ، أو 1000 مرة أسرع ، 300 00:14:36,610 --> 00:14:41,570 لأننا نوزع سلسلة طويلة واحدة على 1000 سلسلة أصغر. 301 00:14:41,570 --> 00:14:45,090 وهكذا في كل مرة يتعين علينا البحث من خلال واحدة من تلك السلاسل يمكننا ذلك 302 00:14:45,090 --> 00:14:50,290 تجاهل 999 سلسلة لا نهتم بها ، وابحث فقط عن تلك السلسلة. 303 00:14:50,290 --> 00:14:53,220 >> وهو في المتوسط ​​أقصر بـ 1000 مرة. 304 00:14:53,220 --> 00:14:56,460 ولذا فإننا ما زلنا نميل نوعًا ما نحو هذه الحالة المتوسطة 305 00:14:56,460 --> 00:15:01,610 من كوننا وقتًا ثابتًا ، ولكن فقط لأننا نستفيد 306 00:15:01,610 --> 00:15:03,730 القسمة على عامل ثابت ضخم. 307 00:15:03,730 --> 00:15:05,804 دعونا نرى كيف سيبدو هذا في الواقع. 308 00:15:05,804 --> 00:15:08,720 لذلك كان هذا هو جدول التجزئة الذي كان لدينا قبل أن أعلنا عن جدول التجزئة 309 00:15:08,720 --> 00:15:10,270 كان قادرًا على تخزين 10 سلاسل. 310 00:15:10,270 --> 00:15:11,728 لن نفعل ذلك بعد الآن. 311 00:15:11,728 --> 00:15:13,880 نحن نعلم بالفعل حدود هذه الطريقة. 312 00:15:13,880 --> 00:15:20,170 الآن جدول التجزئة الخاص بنا سيكون مصفوفة من 10 عقد ، مؤشرات 313 00:15:20,170 --> 00:15:22,120 لرؤساء القوائم المرتبطة. 314 00:15:22,120 --> 00:15:23,830 >> وهو الآن لاغٍ. 315 00:15:23,830 --> 00:15:26,170 كل واحدة من هذه المؤشرات العشر خالية. 316 00:15:26,170 --> 00:15:29,870 لا يوجد شيء في جدول التجزئة لدينا الآن. 317 00:15:29,870 --> 00:15:32,690 >> لنبدأ الآن في وضع بعض الأشياء في جدول التجزئة هذا. 318 00:15:32,690 --> 00:15:35,440 ودعونا نرى كيف ستفيدنا هذه الطريقة قليلاً. 319 00:15:35,440 --> 00:15:36,760 لنقم الآن بتجزئة جوي. 320 00:15:36,760 --> 00:15:40,210 سنقوم بتشغيل السلسلة Joey من خلال دالة تجزئة وسنقوم بإرجاع 6. 321 00:15:40,210 --> 00:15:41,200 حسنا ماذا نفعل الان؟ 322 00:15:41,200 --> 00:15:44,090 >> حسنًا ، نعمل الآن مع القوائم المرتبطة ، نحن لا نعمل مع المصفوفات. 323 00:15:44,090 --> 00:15:45,881 وعندما نعمل مع القوائم المرتبطة نحن 324 00:15:45,881 --> 00:15:49,790 نعلم أننا بحاجة إلى البدء ديناميكيًا في تخصيص المساحة وبناء السلاسل. 325 00:15:49,790 --> 00:15:54,020 هذا نوع من الكيفية - هذه هي العناصر الأساسية لبناء قائمة مرتبطة. 326 00:15:54,020 --> 00:15:57,670 لذلك دعونا نخصص مساحة ديناميكيًا لـ Joey ، 327 00:15:57,670 --> 00:16:00,390 ثم نضيفه إلى السلسلة. 328 00:16:00,390 --> 00:16:03,170 >> لذا انظر الآن إلى ما فعلناه. 329 00:16:03,170 --> 00:16:06,440 عندما قمنا بتجزئة جوي ، حصلنا على رمز التجزئة 6. 330 00:16:06,440 --> 00:16:11,790 الآن يشير المؤشر في موقع الصفيف 6 إلى رأس قائمة مرتبطة ، 331 00:16:11,790 --> 00:16:14,900 وهو الآن العنصر الوحيد في القائمة المرتبطة. 332 00:16:14,900 --> 00:16:18,350 والعقدة في تلك القائمة المرتبطة هي Joey. 333 00:16:18,350 --> 00:16:22,300 >> لذا إذا احتجنا إلى البحث عن Joey لاحقًا ، فسنقوم بتجزئة Joey مرة أخرى ، 334 00:16:22,300 --> 00:16:26,300 نحصل على 6 مرة أخرى لأن دالة التجزئة لدينا حتمية. 335 00:16:26,300 --> 00:16:30,400 وبعد ذلك نبدأ على رأس القائمة المرتبطة المشار إليها 336 00:16:30,400 --> 00:16:33,360 إلى عن طريق موقع المصفوفة 6 ، ويمكننا التكرار 337 00:16:33,360 --> 00:16:35,650 عبر محاولة العثور على جوي. 338 00:16:35,650 --> 00:16:37,780 وإذا قمنا ببناء جدول التجزئة الخاص بنا بشكل فعال ، 339 00:16:37,780 --> 00:16:41,790 ووظيفة التجزئة لدينا بشكل فعال لتوزيع البيانات بشكل جيد ، 340 00:16:41,790 --> 00:16:45,770 في المتوسط ​​، كل من تلك القوائم المرتبطة في كل موقع مصفوفة 341 00:16:45,770 --> 00:16:50,110 سيكون حجمه 1/10 إذا كان لدينا واحد ضخم 342 00:16:50,110 --> 00:16:51,650 قائمة مرتبطة بكل شيء بداخلها. 343 00:16:51,650 --> 00:16:55,670 >> إذا وزعنا تلك القائمة المرتبطة الضخمة عبر 10 قوائم مرتبطة 344 00:16:55,670 --> 00:16:57,760 ستكون كل قائمة بحجم 1/10. 345 00:16:57,760 --> 00:17:01,432 وبالتالي أسرع 10 مرات في البحث. 346 00:17:01,432 --> 00:17:02,390 لذلك دعونا نفعل هذا مرة أخرى. 347 00:17:02,390 --> 00:17:04,290 دعونا الآن تجزئة روس. 348 00:17:04,290 --> 00:17:07,540 >> ولنفترض أن روس ، عندما نفعل ذلك كود التجزئة الذي نحصل عليه هو 2. 349 00:17:07,540 --> 00:17:10,630 حسنًا ، نخصص عقدة جديدة ديناميكيًا ، ونضع روس في تلك العقدة ، 350 00:17:10,630 --> 00:17:14,900 ونقول الآن موقع المصفوفة 2 ، بدلاً من الإشارة إلى الصفر ، 351 00:17:14,900 --> 00:17:18,579 يشير إلى رأس قائمة مرتبطة العقدة الوحيدة هي روس. 352 00:17:18,579 --> 00:17:22,660 ويمكننا القيام بذلك مرة أخرى ، يمكننا تجزئة راشيل والحصول على رمز التجزئة 4. 353 00:17:22,660 --> 00:17:25,490 malloc عقدة جديدة ، ضع راشيل في العقدة ، وقل موقع مصفوفة 354 00:17:25,490 --> 00:17:27,839 4 يشير الآن إلى رأس القائمة المرتبطة التي 355 00:17:27,839 --> 00:17:31,420 العنصر الوحيد هو راشيل. 356 00:17:31,420 --> 00:17:33,470 >> حسنًا ولكن ماذا يحدث إذا حدث تصادم؟ 357 00:17:33,470 --> 00:17:38,560 دعونا نرى كيف نتعامل مع الاصطدامات باستخدام طريقة التسلسل المنفصلة. 358 00:17:38,560 --> 00:17:39,800 دعونا نقسم فيبي. 359 00:17:39,800 --> 00:17:41,094 نحصل على رمز التجزئة 6. 360 00:17:41,094 --> 00:17:44,010 في مثالنا السابق كنا نقوم فقط بتخزين السلاسل في المصفوفة. 361 00:17:44,010 --> 00:17:45,980 كانت هذه مشكلة. 362 00:17:45,980 --> 00:17:48,444 >> لا نريد ضرب جوي ، وقد فعلنا ذلك بالفعل 363 00:17:48,444 --> 00:17:51,110 رأينا أنه يمكننا الحصول على بعض مشاكل التجميع إذا حاولنا خطوة 364 00:17:51,110 --> 00:17:52,202 من خلال والتحقيق. 365 00:17:52,202 --> 00:17:54,660 ولكن ماذا لو تعاملنا مع هذا النوع بنفس الطريقة ، أليس كذلك؟ 366 00:17:54,660 --> 00:17:57,440 إنه يشبه تمامًا إضافة عنصر إلى رأس قائمة مرتبطة. 367 00:17:57,440 --> 00:18:00,220 دعونا فقط مساحة malloc لفيبي. 368 00:18:00,220 --> 00:18:04,764 >> سنقول أن مؤشر فيبي التالي يشير إلى الرأس القديم للقائمة المرتبطة ، 369 00:18:04,764 --> 00:18:07,180 ثم 6 يشير فقط إلى الرئيس الجديد للقائمة المرتبطة. 370 00:18:07,180 --> 00:18:10,150 والآن انظر ، لقد غيرنا فيبي في. 371 00:18:10,150 --> 00:18:14,210 يمكننا الآن تخزين عنصرين باستخدام رمز التجزئة 6 ، 372 00:18:14,210 --> 00:18:17,170 وليس لدينا أي مشاكل. 373 00:18:17,170 --> 00:18:20,147 >> هذا إلى حد كبير كل ما في السلاسل. 374 00:18:20,147 --> 00:18:21,980 And chaining is definitely the method that's 375 00:18:21,980 --> 00:18:27,390 going to be most effective for you if you are storing data in a hash table. 376 00:18:27,390 --> 00:18:30,890 But this combination of arrays and linked lists 377 00:18:30,890 --> 00:18:36,080 together to form a hash table really dramatically improves your ability 378 00:18:36,080 --> 00:18:40,550 to store large amounts of data, and very quickly and efficiently search 379 00:18:40,550 --> 00:18:41,630 through that data. 380 00:18:41,630 --> 00:18:44,150 >> There's still one more data structure out there 381 00:18:44,150 --> 00:18:48,700 that might even be a bit better in terms of guaranteeing 382 00:18:48,700 --> 00:18:51,920 that our insertion, deletion, and look up times are even faster. 383 00:18:51,920 --> 00:18:55,630 And we'll see that in a video on tries. 384 00:18:55,630 --> 00:18:58,930 I'm Doug Lloyd, this is CS50. 385 00:18:58,930 --> 00:19:00,214 undefined44719

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.