تمارين
مراجعة المفاهيم
علاقات البيانات في المواقف اليومية
استناداً إلى العلاقات بين البيانات، اختر لكل موقف مما يلي واحداً من «البنية الخطية» و«البنية الشجرية» و«البنية الشبكية»، واشرح السبب:
- الطلاب واقفون في صف واحد؛ ونحن نأخذ في الاعتبار فقط الجارين المباشرين لكل طالب من الأمام ومن الخلف.
- تتنظم المدرسة في مستويات: «مدرسة ← صف دراسي ← فصل».
- تربط طرق المدينة العديد من التقاطعات. وقد يفضي تقاطع واحد إلى عدة تقاطعات أخرى، وقد تشكّل الطرق دورات.
الإجابة
-
هذه بنية خطية. فباستثناء الطالب الأول والأخير، يكون كل شخص مجاوراً لشخص واحد فقط من الأمام وشخص واحد من الخلف، لذا تمتد العلاقات على خط واحد.
-
هذه بنية شجرية. فكل فصل يتبع صفاً دراسياً واحداً، وكل صف دراسي يتبع المدرسة، لذا تشكّل العلاقات مستويات من الأعلى إلى الأسفل.
-
هذه بنية شبكية. فالتقاطع قد يتصل بعدة تقاطعات أخرى، وقد تشكّل المسارات دورات، لذا لا يمكن ترتيبها في تسلسل واحد أو هرمية صارمة.
لتحديد بنية ما، افحص أولاً العلاقات بين العناصر لا مقدار المساحة التي تستهلكها في الذاكرة.
تخزين ترتيب منطقي في الذاكرة
تأمل تخطيطين مبسّطين للذاكرة لتخزين الترتيب المنطقي A → B → C:
- التخطيط A: تُخزَّن
A, B, Cفي خلايا ذاكرة مرقّمة20, 21, 22على التوالي. - التخطيط B: تُخزَّن
A, B, Cفي خلايا ذاكرة مرقّمة20, 7, 31على التوالي. ويسجّلAموقعB، ويسجّلBموقعC.
- أي التخطيطين يستخدم التخزين في مساحة متصلة، وأيهما يستخدم التخزين في مساحة موزّعة؟
- أي التخطيطين أشبه بمصفوفة، وأيهما أشبه بقائمة مترابطة؟
- أرقام خلايا الذاكرة في التخطيط B ليست بترتيب متزايد. فلماذا يظل قادراً على تمثيل الترتيب المنطقي
A → B → C؟
الإجابة
-
يستخدم التخطيط A خلايا ذاكرة متتالية، لذا يعتمد التخزين في مساحة متصلة. أما العقد في التخطيط B فهي موزّعة على مواقع مختلفة، لذا يستخدم التخزين في مساحة موزّعة.
-
التخطيط A أشبه بمصفوفة، والتخطيط B أشبه بقائمة مترابطة.
-
يتحدد الترتيب المنطقي بالروابط المسجّلة بين العقد، لا بالترتيب العددي لأرقام خلايا الذاكرة. فالموقع الذي يخزّنه
Aيقود إلىB، ثم يقود الموقع الذي يخزّنهBإلىC، لذا لا يزال بالإمكان زيارةA, B, Cبالترتيب.وهذا يبيّن أيضاً أن البنية المنطقية والبنية الفيزيائية طريقتان مختلفتان للنظر إلى البيانات نفسها.
أنواع البيانات وبنياتها في سجلات الواجبات
تسجّل مجموعة دراسية، حسب ترتيب الجلوس، ما إذا كان كل واحد من أربعة طلاب قد سلّم واجبه:
[true, false, true, true]
- أي نوع بيانات أساسي يصلح لكل عنصر؟
- العناصر الأربعة مرتبة في خط حسب ترتيب الجلوس. فأي بنية منطقية يستخدم هذا؟
- لنفترض أن المجموعة سجّلت لاحقاً درجة واجب كل طالب على شكل
[90, 0, 85, 100]. فهل يغيّر هذا «نوع المحتوى» للبيانات أم «تنظيمها»؟ اشرح السبب.
الإجابة
-
يمثّل كل عنصر «نعم» أو «لا» فقط، لذا يصلح النوع المنطقي
bool. -
العناصر مرتبة حسب ترتيب الجلوس، مشكّلة بنية خطية يمكن تخزينها في مصفوفة.
-
يتغير نوع المحتوى: تتحول العناصر من قيم منطقية إلى أعداد صحيحة. أما التنظيم فلا يتغير. فما زالت البيانات مرتبة في خط حسب ترتيب الجلوس، ويمكن تخزينها في مصفوفة، وهي بنية خطية.
يصف نوع البيانات الأساسي «ما يُخزَّن»، بينما تصف بنية البيانات «كيف تُنظَّم البيانات».
تمارين برمجية
عدّ الآحاد في التمثيل الثنائي
بمعطى عدد صحيح غير سالب n، عُدّ عدد الآحاد في تمثيله الثنائي.
استخدم العمليات على البتات. ولا تحوّل التمثيل الثنائي إلى سلسلة نصية أو تستخدم دالة مدمجة تعدّ الآحاد مباشرةً.
تلميحات
- n & 1 يستخرج البت الأقصى يميناً في n، وهو ما يخبرك ما إذا كان هذا البت يساوي 1
- الإزاحة إلى اليمين بمقدار واحد تتخلص من البت الأقصى يميناً الحالي؛ وتستخدم معظم اللغات المعامل >>
- بعد تنفيذ الطريقة التي تفحص بتاً واحداً وتزيحه في كل مرة، لاحظ أن n & (n - 1) يحوّل البت 1 الأقصى يميناً في n إلى 0
LeetCode{ .rounded-button .exercise-button target="_blank" rel="noopener noreferrer" }