Data Structure & STL (Part 1)

تحدثنا في مقالنا السابق عن Big O Notation  ، و الان سنكمل حديثنا عن مجموعة من الأشياء الهامة التي تهم أي مبرمج بشكل عام .


1-                      Strings (السلاسل المحرفية):

هي احدى أنواع البيانات التي تستخدم بشكل كبير، و يوجد مكتبة تحوي مجموعة من التوابع لتسهيل التعامل مع السلاسل المحرفية وهي مكتبة <string> ، بحيث بداية نقوم بتضمين هذه المكتبة ، ثم نقوم باستخدام هذه التوابع .

و الجدول التالي يوضح بعض التوابع الموجودة ضمن هذه المكتبة :

Function

Description

Begin()

يعيد هذا التابع iterator على العنصر الأول في String

End()

يعيد هذا التابع iterator على العنصر ما بعد الاخير في String

Clear()

حذف جميع أحرف String

Length()

يعيد طول ال String (عدد الاحرف)

Empty()

يعيد قيمة بوليانية 1 (اذا كان String  فارغ)

Insert()

لاضافة محارف الى String

Erase()

لحذف محارف من  String

Find()

لايجاد محتوى في String

C_str()

يعيد Pointer  يمثل char*

2-                    Containers  (الحاويات):

هي طريقة لتخزين ز تنظيم البيانات في الذاكرة، وتقسم الى ثلاثة اقسام:

1-   Sequence Container (Vector , List , Deque)

2-   Containers Adaptors (Stack , Queue , Priority_Queue)

3-   Associative Containers (Set , Map)

سوف نتحدث عنها بشكل موسع في الجزء الثاني .  

و فيما يلي جدول ضم اشهر ال Containers و اكثرها استخداما :

Container

Description

Advantages

Vector

مصفوفة قابلة لتمدد

قابلة للإضافة و الحذف من أي موقع فيا و الوصول الى العنصر عن طريق Index

Map

شجرة بحث ثنائي(مصفوفة يمكن الوصول لعناصرها من خلال مفاتيح من الي نوع )

قابلة للوصول الى العناصر من خلا مفتاح من أي نوع بتعقيد لوغارتمي والإضافة و الحذف بتعقيد لوغارتمي

Set

شجرة بحث ثنائي (مجموعة عناصر مرتبة تصاعديا البحث فيها ثنائي)

مرتبة ، و قابلة للإضافة و الحذف و البحث بتعقيد لوغارتمي

Queue

طابور

تنظيم الداتا على شكل طابور(الداخل أولا يخدم اولا)

Dequeue

طابور

سريعة في الحذف و الإضافة عند الأطراف

Stack

مكدس

لا يمكن لوصول الى محتوياتها الا من الطرف الخلفي (الداخل أخيرا يخدم اولا)


اهم التوابع التي تتشارك بها معظم ال Containers :

Function

Description

Begin()

يعيد هذا التابع iterator على العنصر الأول في Container 

End()

يعيد هذا التابع iterator على العنصر ما بعد الاخير في Container

Clear()

حذف جميع عناصر ال Container

Size()

يعيد عدد العناصر الموجودة في ال Container

Empty()

يعيد قيمة بوليانية 1 (اذا كان Container  فارغ)

3-                      Iterators  (كائنات التكرار):

هي تعميم لمفهوم المؤشرات و هي تشير الى العناصر الموجودة في الحاويات .

مثلا في Set   لا بمكننا الوصول الى العناص رعن طريق  Index  ، هنا تاتي فائدة Iterator  للتنقل بين عناصر Set .

و بالتالي تفيد في الحصول على مرجعية لعناصر الحاويات كما المؤشرات تماما .

4-                      Pair (الزوج):

بنية تتالف من عنصرين متلازمين ، تعرف بالشكل التالي :

Pair<type,type> name ;

Type : نوع العنصر (int ,char,string…..)  .

Name  : اسم الزوج .د

مثال :

pair<int,string> p = make_pair(1,”Oxygen”);

cout<<p.first<<” “<<p.second<<endl;




اختبار تورينغ

إن كنت من المهتمين بمواضيع الذكاء الصنعي فلا بد أنك قد سمعت عن ذلك الاختبار الشهير الذي يدعى " اختبار تورينغ " ,ولعلك سمعت في الأخبار عن تمكن آلة أو برنامج من اجتياز " اختبار تورينغ " ,فما هو "اختبار تورينغ " ؟ا

في هذا المقال سنتحدث عن العالم آلان تورينغ واختباره الشهير الذي يعتبر حجر الأساس في مجال الذكاء الصنعي , نتمنى لكم قراءة ممتعة .

من هو آلان تورينغ ؟

آلان تورينغ هو عالم بريطاني ولد عام 1912 ويعتبر مؤسس علم الحاسوب والمنشئ لهذه التكنولوجيا السائدة في أواخر القرن العشرين , عند اندلاع الحرب العالمية الثانية عمل على كسر شيفرة الإنجما الألمانية , كان عمله سري وقلة قليلة من الناس كانت تعلم بأهمية ما قام به ودوره البارز في إنهاء الحرب حيث ساهم في تقصير عمر الحرب عامين كما كان رأي البعض .

كيف تمكن آلان تورينغ من فك شيفرة الإنجما ؟

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

لعب آلان تورينغ دورا هاما في فك هذه الشيفرة حيث قام وبمساعدة زملائه باختراع آلته المشهورة والتي عرفت باسم Bombe"" , حيث تمكن من خلالها من فك شيفرة الاتصالات البحرية الألمانية الأمر الذي ألحق خسائر كبيرة بالألمان .

ما هي آلة تورينغ؟

هي آلة تتسم بالبساطة وعلى الرغم من ذلك فهي قادرة على محاكاة أي خوارزمية حاسوبية بغض النظر عن مدى تعقيدها.

تتكون هذه الآلة من شريط طويل جداً يلعب دور وسط التخزين ,وتعالج بذلك ثلاثة أنواع من الرموز وهي الصفر والواحد والفراغ ,بنفس الوقت تمتلك الآلة رأس والذي يتوضع فوق أحد المربعات على الشريط ليقوم بالعمليات الثلاثة التالية :

قراءة الرمز الموجود على المربع .كتابة رمز جديد أو محو رمز (تحرير الرمز) .تحريك الشريط إلى اليمين أو اليسار بمقدار مربع واحد.

     

هل تستطيع الآلة أن تفكر؟

جاء اختبار تورينغ للإجابة على هذا السؤال وتحديد فيما إن كانت الآلة قادرة على التفكير مثل البشر.

وبناءاً على اختبار تورينغ نستطيع القول بأن الآلة تمتلك ذكاء اصطناعي في حال تمكنت من اجتياز هذا الاختبار ,أي أن هذه الآلة قادرة على محاكاة الاستجابة البشرية عند شروط معينة .

في اختبار تورينغ وتحديداً فيما يعرف بلعبة المحاكاة "Imitation Game" يتم طرح سؤال من قبل حكم (كائن بشري) على طرفي الاختبار وهما الآلة (جهاز كمبيوتر على سبيل المثال ) وشخص آخر (إنسان) وينتظر الحكم الإجابة على السؤال المطروح والذي يرسل إليه من قبل طرفي الاختبار (الآلة والإنسان)

بشكل نصي ويكون الحكم معزول عن طرفي الاختبار ,عندئذ يتوجب على الحكم تمييز فيما إن كان مصدر الإجابة المرسلة الإنسان أو الآلة ,يتم إعادة هذا الاختبار عدد من المرات خلال فترة زمنية محددة (10 دقائق مثلاً) ,وفي ضوء ذلك نقول أن الآلة نجحت في اجتياز اختبار تورينغ في حال لم يتمكن الحكم من تحديد مصدر الإجابة على السؤال المطروح .

ولمعرفة مزيد من التفاصيل وفهم الموضوع بشكل أبسط ننصحكم بمتابعة هذا الفديو الجميل عن اختبار تورينغ

من هنا

المصادر:

historysheroes

turing.org

cl.cam.a

techtarget


Copyright 2016 Oxygen trailer

Designed by Oxygen Community