Lec 1 2 3 DSA

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 49

‫هياكل البيانات والخوارزميات‬

Data Structure and Algorithms


Lec - 1

Created by: Dr. Thoyazan Sultan Algaradi


Assistant pro at computational department
At university of science and technology - Taiz
‫لماذا تتعلم بنية البيانات والخوارزميات؟‬
‫نظرا ل ثراء البيانات وألن التطبيقات تزداد تعقيدًا ‪ ،‬فهناك ثالث مشكالت شائعة تواجهها التطبيقات اآلن في كل يوم‪.‬‬
‫ً‬

‫عنصرا من المتجر ‪.‬إذا كان التطبيق‬


‫ً‬ ‫‪ -‬البحث عن البيانات ‪ : Data Search‬ضع في اعتبارك جردًا لـ ‪1‬مليون )‪(106‬‬
‫سيبحث عن عنصر ‪ ،‬فيجب عليه البحث عن عنصر في مليون )‪(106‬عنصر في كل مرة يؤدي إلى إبطاء البحث ‪.‬مع نمو‬
‫البيانات ‪ ،‬سيصبح البحث أبطأ‪.‬‬

‫‪ -‬سرعة المعالج ‪ : Processor speed‬على الرغم من أن سرعة المعالج عالية جدًا ‪ ،‬إال أنها محدودة إذا نمت البيانات إلى‬
‫مليار سجل‪.‬‬

‫نظرا ألن اآلالف من المستخدمين يمكنهم البحث عن البيانات في وقت واحد على‬
‫‪ -‬الطلبات المتعددة ‪ً : Multiple requests‬‬
‫ضا أثناء البحث في البيانات‪.‬‬
‫خادم ويب ‪ ،‬فإن الخادم السريع يفشل أي ً‬

‫لحل المشاكل المذكورة أعاله ‪ ،‬تأتي هياكل البيانات لإلنقاذ ‪.‬يمكن تنظيم البيانات في هيكل بيانات بطريقة قد ال تكون هناك حاجة‬
‫للبحث في جميع العناصر ‪ ،‬ويمكن البحث عن البيانات المطلوبة على الفور تقريبًا‪.‬‬
‫هياكل البيانات ‪ :‬هي طريقة برمجية لتخزين البيانات بحيث يمكن استخدام‬
‫عا مختلفة من هياكل‬ ‫البيانات بكفاءة‪ .‬يستخدم كل تطبيق مؤسسي تقريبًا أنوا ً‬
‫البيانات بطريقة أو بأخرى‪ .‬سيمنحك هذا المقرر التعليمي فه ًما رائعًا لهياكل‬
‫البيانات الالزمة لفهم مدى تعقيد التطبيقات على مستوى المؤسسة والحاجة إلى‬
‫الخوارزميات وهياكل البيانات‪.‬‬
‫تطبيقات هيكل البيانات والخوارزميات‬
‫الخوارزمية هي إجراء تدريجي ‪ ،‬والذي يحدد مجموعة من التعليمات ليتم تنفيذها بترتيب معين للحصول على‬
‫المخرجات المطلوبة ‪.‬يتم إنشاء الخوارزميات بشكل عام بشكل مستقل عن اللغات األساسية ‪ ،‬أي يمكن تنفيذ خوارزمية‬
‫بأكثر من لغة برمجة واحدة‪.‬‬

‫من وجهة نظر بنية البيانات ‪ ،‬فيما يلي بعض الفئات المهمة للخوارزميات ‪-‬‬

‫بحث ‪ - Search‬خوارزمية للبحث عن عنصر في بنية بيانات‪.‬‬ ‫•‬


‫فرز ‪ - Sort‬خوارزمية لفرز العناصر بترتيب معين‪.‬‬ ‫•‬
‫إدراج ‪ - Insert‬خوارزمية إلدراج عنصر في بنية البيانات‪.‬‬ ‫•‬
‫تحديث ‪ - Update‬خوارزمية لتحديث عنصر موجود في بنية بيانات‪.‬‬ ‫•‬
‫حذف ‪ - Delete‬خوارزمية لحذف عنصر موجود من بنية بيانات‪.‬‬ ‫•‬
‫‪-‬يمكن حل مشاكل الكمبيوتر التالية باستخدام هياكل البيانات‬

‫•‬ ‫‪Fibonacci number series‬سلسلة أرقام فيبوناتشي‬


‫•‬ ‫‪Knapsack problem‬مشكلة حقيبة الظهر‬
‫•‬ ‫‪Tower of Hanoi‬برج هانوي‬
‫•‬ ‫‪Floyd-Warshall .. All pair shortest path by Floyd-‬أقصر مسار زوجي بواسطة‬
‫‪Warshall‬‬
‫‪Shortest path by Dijkstra‬أقصر طريق لديجكسترا •‬
‫‪Project scheduling‬جدولة المشروع •‬
‫ماذا سنتعلم في هذا المستوى ‪:‬‬

‫‪ -‬الخوارزميات وطريقة عملها‬


‫‪ -‬هياكل البيانات ‪data structures‬‬

‫المتطلبات ‪: requirements‬‬
‫‪ -‬معرفة بلغة البرمجة ‪C++‬‬
‫‪ -‬التطبيق العملي على حل المشاكل‬
‫بماذا ستفيدنا دراسة هياكل البيانات والخوارزميات‬

‫تعد بنية البيانات طريقة منهجية لتنظيم البيانات من أجل استخدامها بكفاءة‪ .‬الشروط التالية هي الشروط األساسية لهياكل‬
‫البيانات‪.‬‬
‫الواجهة ‪ - Interface‬لكل بنية بيانات واجهة‪ .‬تمثل الواجهة مجموعة العمليات التي تدعمها بنية البيانات‪ .‬توفر الواجهة فقط‬
‫قائمة العمليات المدعومة ونوع المعلمات التي يمكن قبولها وإرجاع نوع هذه العمليات‪.‬‬
‫ضا تعريف الخوارزميات‬ ‫التنفيذ ‪ - Implementation‬يوفر التنفيذ التمثيل الداخلي لهيكل البيانات‪ .‬يوفر التنفيذ أي ً‬
‫المستخدمة في عمليات بنية البيانات‪.‬‬

‫‪ -‬كل الطرق تؤدي الى روما‬


‫‪ -‬يجب علينا معرفة افضل الطرق التي يجب ان نسلكها‬
‫‪ -‬الوقت والفضاء ‪time and space‬‬
‫خصائص هياكل البيانات ‪:‬‬

‫‪ -‬الصحة ‪ - Correctness‬يجب أن تنفذ خوارزميات هياكل البيانات واجهتها بشكل صحيح‪.‬‬


‫‪ -‬تعقيد الوقت ‪ - Time Complexity‬يجب أن يكون وقت التشغيل أو وقت تنفيذ عمليات بنية البيانات‬
‫صغيرا قدر اإلمكان‪.‬‬
‫ً‬
‫‪ -‬تعقيد الفضاء ‪ - Space Complexity‬يجب أن يكون استخدام الذاكرة لعملية بنية البيانات أقل ما يمكن‪.‬‬
‫قضايا وقت التنفيذ ‪Execution Time Cases‬‬
‫هناك ثالث حاالت تُستخدم عادة ً لمقارنة وقت تنفيذ هياكل البيانات المختلفة بطريقة نسبية‪.‬‬

‫أسوأ حالة ‪ - Worst Case‬هذا هو السيناريو الذي تستغرق فيه عملية بنية بيانات معينة أقصى وقت يمكن أن تستغرقه ‪.‬إذا‬ ‫•‬
‫كان وقت أسوأ حالة للعملية هو )‪ ،ƒ(n‬فلن تستغرق هذه العملية أكثر من )‪ ƒ (n‬مرة حيث تمثل )‪ƒ (n‬دالة لل ‪. n‬‬

‫الحالة المتوسطة ‪ - Average Case‬هذا هو المشهد الذي يصور متوسط وقت تنفيذ عملية بنية بيانات ‪.‬إذا استغرقت العملية‬ ‫•‬
‫وقت )‪ ƒ(n‬في التنفيذ ‪ ،‬فستستغرق العمليات ‪ m‬وقتًا )‪.m ƒ(n‬‬

‫أفضل حالة ‪ - Best Case‬هذا هو السيناريو الذي يصور أقل وقت تنفيذ ممكن لعملية بنية بيانات ‪.‬إذا استغرقت العملية‬ ‫•‬
‫وقت )‪ ƒ(n‬في التنفيذ ‪ ،‬فقد تستغرق العملية الفعلية وقتًا كرقم عشوائي والذي سيكون بحد أقصى )‪. ƒ (n‬‬
‫المصطلحات األساسية ‪:‬‬
‫البيانات ‪ - Data‬البيانات عبارة عن قيم أو مجموعة من القيم‪.‬‬ ‫•‬
‫عنصر البيانات ‪ - Data Item‬يشير عنصر البيانات إلى وحدة مفردة من القيم‪.‬‬ ‫•‬
‫عناصر المجموعة ‪ - Group Items‬تسمى عناصر البيانات المقسمة إلى عناصر فرعية كعناصر‬ ‫•‬
‫المجموعة‪.‬‬
‫العناصر األولية ‪ - Elementary Items‬تسمى عناصر البيانات التي ال يمكن تقسيمها كعناصر‬ ‫•‬
‫أولية‪.‬‬
‫السمة والكيان ‪ - Attribute and Entity‬الكيان هو ذلك الذي يحتوي على سمات أو خصائص‬ ‫•‬
‫معينة ‪ ،‬والتي قد يتم تعيين قيم لها‪.‬‬
‫مجموعة الكيانات ‪ - Entity Set‬تشكل الكيانات ذات السمات المتشابهة مجموعة كيان‪.‬‬ ‫•‬
‫الحقل ‪ - Field‬الحقل هو وحدة أولية للمعلومات تمثل سمة من سمات الكيان‪.‬‬ ‫•‬
‫السجل ‪ - Record‬السجل عبارة عن مجموعة من قيم الحقول لكيان معين‪.‬‬ ‫•‬
‫الملف ‪ - File‬الملف عبارة عن مجموعة من سجالت الكيانات في مجموعة كيانات معينة‪.‬‬ ‫•‬
‫كيف يمكن ان نحقق الجودة ‪quality‬‬

‫حساب كم من الوقت اخذ الكود وقت للتنفيذ على جهاز الكمبيوتر ‪.‬‬

‫نحتاج الستعمال طريقة عامه اكثر‬

‫المعادلة الرياضية ‪mathematical equation‬‬


‫العالقة بين الحجم المدخل ‪ input size‬و الوقت ‪. time‬‬
THE END
‫هياكل البيانات والخوارزميات‬
Data Structure and Algorithms
Lec – 2-3

Created by: Dr. Thoyazan Sultan Algaradi


Assistant pro at computational department (cybersecurity program)
At university of science and technology - Taiz
Programming paradigm
• The way to organize data and functions

Object oriented programming


• Combine data and functions dealing with it in a
single element called “ object”
- data named “ Properties”
- functions named “methods”
Array
Array
- Has static length.

- To add or remove element you should make another


one with new size and copy elements to it.

- Places in memory should be adjacent.


void Fill()
{
#include<iostream> int no_of_items;
using namespace std; cout<<" how many ites you want to fill ?" << endl;
class Array cin>> no_of_items ;
{ if(no_of_items > size)
{
private:
cout <<" you cannot exceed the array size" << endl;
int size; return;
int length; }
int *items; else
public: {
Array(int arrsize) for(int i=0; i<no_of_items; i++)
{ {
size = arrsize; cout<<"enter item no " << i << endl;
cin >> items [i];
length = 0;
length++ ;
items = new int[arrsize]; }
} }
}
void Display()
{ void Search (int key)
cout<< "Display Array content" << endl; {
for(int i=0; i<length; i++) int index = -1;
{ for ( int i=0; i<length; i++)
cout << items[i] << " " ; {
} if(items[i]==key)
cout << endl; {
} cout<< " item is found in index number "
//--------------------------------------------------------- << i << endl;
int getSize() index = i;
{ }
return size; }
} if ( index ==-1)
//--------------------------------------------------------- {
int getLength() cout<< " item is not found , please try
{ again "<< endl;
return length; }
} }
void insert ( int index, int newitem)
{
void Append (int newitem) if(index>=0 && index < length)
{ {
if(length<size) for( int i=length ; i>index; i--)
{ {
items[length]=newitem; items[i]=items[i-1];
length++; }
} items[index]=newitem;
else length++;
cout<< " Array is full " << endl; }
} else
cout<<"error - index out of range" << endl;
}
void Enlarge ( int newsize)
{
void Delete(int index) if (newsize <=size)
{ {
if(index>0 && index<size) cout<<" new size must be larger than current size" << endl;
{ return;
for(int i=index; i<length-1 ; i++) }
{ else
items[i]= items[i+1]; {
} size = newsize;
length--; int *old= items;
} items = new int[newsize];
else for(int i=0; i<length;i++)
cout<<" index out of range" << endl; {
} items[i]=old[i];
}
delete[] old;
}
}
void merage (Array items2)
{
size = size + items2.getSize();
int *old = items;
items = new int[size]; int main ()
for(int i=0; i<length;i++) {
{
items[i]=old[i];
}
int k=0;
for(int i=length; i<(length + items2.getLength());i++)
{
items[i]=items2.items[k];
k++;
}
delete[] old; }
length = length + items2.getLength();
}
};
THE END

You might also like