InstagramTwitterSnapChat


 
وصف

العودة   منتديات سكاو > الكليات الجامعية > منتدى كلية الحاسبات وتقنية المعلومات > المنتدى العام لكلية الحاسبات وتقنية المعلومات
   
   


المنتدى العام لكلية الحاسبات وتقنية المعلومات قسم خاص بالمواد العامة و الطلاب غير المتخصصين بكلية الحاسبات وتقنية المعلومات

[CPCS 204] الدرس الثاني: Searching Techniques

المنتدى العام لكلية الحاسبات وتقنية المعلومات

إضافة رد
 
أدوات الموضوع إبحث في الموضوع انواع عرض الموضوع
منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
  #1  
قديم 18-09-2012, 01:47 AM
الصورة الرمزية deathpain

deathpain deathpain غير متواجد حالياً

devkemo

 
تاريخ التسجيل: Dec 2010
الكلية: كلية الحاسبات وتقنية المعلومات
التخصص: Computer Science
نوع الدراسة: إنتظام
المستوى: الثامن
البلد: جــــدة
الجنس: ذكر
المشاركات: 770
افتراضي [CPCS 204] الدرس الثاني: Searching Techniques




-----------------------------------------------

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته


" العلم كالأرض لا يمكننا أن نمتلك منه سوى القليل " .. المفكر الفرنسي فولتيـر

-----------------------------------------------

هناك العديد من الطرق المستخدمة للبحث عن البيانات داخل المصفوفات، ولكننا اليوم سنتطرق إلى إثنان منها فقط ! إحداها مستهلكة وبطيئة نقرتين لعرض الصورة في صفحة مستقلة والأخرى مبتكرة وسريعة نقرتين لعرض الصورة في صفحة مستقلة


------------
~l| البحث الخطي |l~
------------

سبق وأن درسنا في مادتي البرمجة 202 و 203 كيفية البحث عن البيانات داخل الـArrays وكانت الطريقة بسيطة وبدائية إلى حد ما، فكان يجب علينا البحث داخل عناصر المصفوفة عنصراً عنصراً وإذا وجدنا العنصر نخرج من اللوب الخاصة بالبحث، وإذا لم نجد العنصر فإننا في كل حال سنمر على كامل عناصر المصفوفة، أي إذا كان لدينا مصفوفة تتكون من 1000 عنصر فإنه بإنتهاء البحث سنمر على الـ1000 عنصر كاملة نقرتين لعرض الصورة في صفحة مستقلة.

كود PHP:
public static int LinearSearch(int[] array, int value){

for (
int i=0;i<array.length;i++){

if (
a[i] == value )
return 
1;

} \\ 
End of Loop
 
return 0;

} \\ 
End of Method 
عندما استخدامنا للبحث الخطي Linear Search في السابق كانت هذه الطريقة هي المثلى والرائعة والأفضل وهي كذلك في حال كانت المصفوفة غير مرتبة ( Unsorted ).

ولكن لنسأل أنفسنا سؤالاً:
ماذا لو كانت المصفوفة مرتبة ( Sorted )، هل سيمكننا البحث عن العناصر بطريقة أفضل ؟

وقبل أن نجاوب على السؤال، دعونا نلعب لعبة بسيطة، لعبة تخمين الارقام من الطفولة نقرتين لعرض الصورة في صفحة مستقلة
اللعبة ببساطة كالتالي:
* أتخيل رقم في عقلي من 1 إلى 100
* أجعل أي شخص يقوم بتخمين الرقم ومن ثم أخبره إذا كان الرقم الذي خمنه أعلى من الرقم الذي تخيلته أو أقل
* ومن ثم تعاد نفس العملية مراراً وتكراراً حتى يجد الرقم الذي تخيلته.
كانت مهمتنا في هذه اللعبة تضييق عدد الإحتمالات إلى أقل حد ممكن حتى نستطيع أن نجد الرقم المحدد نقرتين لعرض الصورة في صفحة مستقلة


في هذه اللعبة أغلب الأشخاص سيختارون الاختيار 50 كأول اختيار لهم، لماذا ؟
لأنهم بهذا قسمو عدد الاحتمالات إلى النصف فإما أن تكون في النصف العلوي 50-100 أو النصف السفلي 1-49 ،،
أفضل طريقة للفوز باللعبة دائماً هي بتقليص عدد الاحتمالات إلى النصف 50 - 25 - 12 - 6 - 3 - 1 وهكذا نقرتين لعرض الصورة في صفحة مستقلة

السؤال هنا: هل يمكنني الاستفادة من فكرة هذه اللعبة في البحث عن البيانات داخل المصفوفة ؟
ستعرفون إجابة هذا السؤال من التالي نقرتين لعرض الصورة في صفحة مستقلة


------------
~l| البحث الثنائي |l~
------------
لنفرض أن لدينا هذه المصفوفة المرتبة من الأصغر للأكبر:


ولنفرض أننا نريد البحث عن العنصر الذي يحمل القيمة 19، عادة كنا سنذهب إلى أول عنصر وآخر عنصر ونجمعهما ونقسمها على 2 وسنحصل في هذه الحالة على الرقم 60، وعندما نأتي للمصفوفة لا نجد الرقم 60، وحتى أقرب رقم للـ60 يقع في الخانة قبل الأخيرة.

ولكن ماذا لو أخذنا فكرة اللعبة السابقة في هذا المثال ؟
أول Index في المصفوفة هو 0 وآخر Index في المصفوفة هو 8، لذا سنجمعهما ونقسمهما على 2 وعندها سيكون المنتصف هو الـIndex رقم 4.
وسندع الكمبيوتر يتأكد هل القيمة الموجودة في Index رقم 4 أكبر من 19 أو أصغر منه ؟
الـIndex رقم 4 يحمل القيمة 33 وهي في هذه الحالة أكبر من 19 وهذا يعني أننا قللنا مجال البحث وحصرناه بين Index رقم 0 و Index رقم 3 ! وسيتم تعديل خاصية البحث لتصبح من 0 إلى 3، وعندها سنضطر إلى جمع 0 والـ3 ونقسمهما على 2 لنحصل على 1 ثم نذهب إلى الـIndex رقم 1 ونتأكد من قيمته ونجد أنها 6 فهذا يعني أن الرقم 19 سيكون ما بين الـIndex 2 و الـIndex 3 ،، وعندها نجمع 2 + 3 ونقسمها على 2 لنحصل على 2 ووجدنا عندها الـ19 ..

( ملاحظة: جميع العمليات هنا تنطبق عليها خواص الـIntegers، فيعني أن 2 + 3 عند قسمتهما على 2 نحصل على 2 وليس 2.5 )

فلو لاحظنا في المسألة أن الشيء الوحيد الذي يتغير هوا مجال البحث ففي البداية كان بين 0 و 8، ثم أصبح بين 0 و 3 وبعدها أصبح بين 2 و 3 ..


كود توضيحي للطريقة:
كود PHP:
public static int BinarySearchint[] array, int value){
int low =0;
int high = array.length;
while ( 
low high ) {
int mid = ( low high ) / 2;
if (array[
mid] == value)
return 
1;

else if (array[
mid] < value)
low mid 1;

else 
high mid 1;
End of While Loop

return 0
End of Method 
الـLow هنا يمثل رقم أول Index يبدأ البحث عنده والـHigh هو رقم آخر Index والـMid هنا يمثل طريقة التخمين بأخذ نصف الحيز الموجودة لدينا.

نلاحظ في هذه الطريقة تميز البحث الثنائي BinarySearch على البحث الخطي LinearSearch حيث أن عدد مرات التأكد أصبح أقل بكثير وبطريقة مميزة !


لنجري بعض المقارنات عن أسوأ حالة لكل من الطريقتين:
لنفرض أن لدينا مصفوفة بها 100 عنصر، ونريد البحث عن عن غير موجود بها، كم عدد مرات التخمين أو التأكد من العناصر سيقوم بها كل من الحالتين.


في الـ LinearSearch إذا كان العنصر غير موجود فأنه سيقوم بالتأكد من 100 عنصر أي 100 عملية تأكد.
أما في الـ BinarySearch فإنه سيقوم بالتالي:
* في التخمينة الأولى سيقلل مجال البحث إلى 50 عنصر
* في التخمينة الثاني سيقلل مجال البحث إلى 25 عنصر
* في التخمينة الثالثة سيقلل مجال البحث إلى 12 عنصر
* في التخمينة الرابعة سيقلل مجال البحث إلى 6 عناصر
* في التخمينة الخامسة سيقلل مجال البحث إلى 3 عناصر
* في التخمينة السادسة سيقلل مجال البحث إلى عنصر واحد
* في التخمينة السابعة لن يبقى أي عنصر للتأكد منه وسيخرج من الميثود

نلاحظ هنا التفوق التام للـBinarySearch بـ7 محاولات للتأكد مقابل 100 محاولة للـLinearSearch !!

حالة عامة للـBinarySearch وطريقة حسابها:
* في المرة الأولى سيكون عدد العناصر المتبقية يساوي n/2^1
* في المرة الثانية سيكون عدد العناصر المتبقية يساوي n/2^2
* في المرة الثالثة سيكون عدد العناصر المتبقية يساوي n/2^3
* في المرة الرابعة سيكون عدد العناصر المتبقية يساوي n/2^4
* في المرة k سيكون عدد العناصر المتبقية يساوي n/2^k
وهكذا .. ( n تمثل في المثال السابق عدد العناصر كاملاً وهو 100 ) ..

نحن نريد الحصول على عنصر واحد فقط عند البحث، لذا ستكون المعادلة كالآتي:
n/2^k = 1
نضرب الطرفين في 2^k فتصبح:
n = 2^k
وبأخذ الـlog الطبيعي لها نحصل على:
k = log(2) n

فهذا يعني أن الوقت التي تستغرقه عملية البحث عن عنصر بواسطة BinarySearch تستغرق Log n من الوقت عكس الـLinearSearch الذي يستغرق n من الوقت.


وختاماً سأقوم بعرض عدد المحاولات التي يقوم بها الـBinarySearch على عدد من الأرقام:
* مصفوفة حجمها 8، ينتهي منها في 3 محاولات فقط
* مصفوفة حجمها 1024، ينتهي منها في 10 محاولات فقط
* مصفوفة حجمها 65536، ينتهي منها في 16 محاولة فقط
* مصفوفة حجمها 1048576، ينتهي منها في 20 محاولة فقط
* مصفوفة حجمها 33554432، ينتهي منها في 25 محاولة فقط
* مصفوفة حجمها 1073741824، ينتهي منها في 30 محاولة فقط


إذا كانت هناك أي أسئلة أتمنى وضعها في الردود ،، مع تمنياتي للجميع بالتوفيق والنجاح

تم بحمد الله

 


توقيع deathpain  



في حال وجود أي استفسار أو سؤال حول الجافا CPCS202 الرجاء كتابة استفسارك مباشرة في موضوعي هنا:

تطبيق - معدلي الجامعي - التطبيق الأسهل لحساب المعدل الجامعي
http://skaau.com/vb/showthread.php?t=745520

 

رد مع اقتباس

 

منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
قديم 18-09-2012, 10:03 AM   #2

asma'a

مشرفة مُتألقة سابقة

الصورة الرمزية asma'a

 
تاريخ التسجيل: Oct 2008
كلية: كلية الحاسبات وتقنية المعلومات
التخصص: CS ولله الحمد ^^..
نوع الدراسة: إنتظام
المستوى: متخرج
البلد: جــــدة
الجنس: أنثى
المشاركات: 1,514
افتراضي رد: [CPCS 204] الدرس الثاني: Searching Techniques

وعليكم السلام ورحمة الله وبركاته ..

الله يزيدك علم ونور ي سيدي ^_^..

حقيقة ، لسى ماقريت الشرح :p ..

بس ان شاء الله ع رواقة حمخمخ عليه ، يعطيك العافية ، وربي يجعلو في موازين حسناتك ..


بالتوفيق ..

دمتـَ بخير ..

 

توقيع asma'a  

 

الحسد يجعل بعض الناس يلجؤوا الى طرق خبيثة وملتوية للتقليل من شأن ( الناجحين )
بسبب ضعف الشخصية و الإنهزامية لديهم

ودائما الحاسد يظل في المؤخرة ..

لـ/ ـلؤي نسيم || Loai Nassem ..


*.*.*.*.*.*

يقول الرب جل وعلا: " فَاسْتَجَابَ لَهُ رَبُّهُ فَصَرَفَ عَنْهُ كَيْدَهُنَّ إِنَّهُ هُوَ السَّمِيعُ الْعَلِيمُ " سورة يُوسف (34)

 

asma'a غير متواجد حالياً   رد مع اقتباس
 

منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
قديم 19-09-2012, 12:53 AM   #3

deathpain

devkemo

الصورة الرمزية deathpain

 
تاريخ التسجيل: Dec 2010
كلية: كلية الحاسبات وتقنية المعلومات
التخصص: Computer Science
نوع الدراسة: إنتظام
المستوى: الثامن
البلد: جــــدة
الجنس: ذكر
المشاركات: 770
افتراضي رد: [CPCS 204] الدرس الثاني: Searching Techniques

المشاركة الأصلية كتبت بواسطة asma'a مشاهدة المشاركة
وعليكم السلام ورحمة الله وبركاته ..

الله يزيدك علم ونور ي سيدي ^_^..

حقيقة ، لسى ماقريت الشرح :p ..

بس ان شاء الله ع رواقة حمخمخ عليه ، يعطيك العافية ، وربي يجعلو في موازين حسناتك ..


بالتوفيق ..

دمتـَ بخير ..
اللهم آمين ،
مخمخي عليه والي مو فاهمته اعيد شرحه إن شاء الله ،،

بالتوفيق

 

deathpain غير متواجد حالياً   رد مع اقتباس
 

منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
قديم 20-09-2012, 02:28 AM   #4

n3omh

أستغفرالله

الصورة الرمزية n3omh

 
تاريخ التسجيل: Oct 2010
التخصص: CS
نوع الدراسة: إنتظام
المستوى: الرابع
الجنس: أنثى
المشاركات: 1,296
افتراضي رد: [CPCS 204] الدرس الثاني: Searching Techniques

شكرا عبدالكريم ع الشررح

الحمدلله اتوضحت ليا نقاط كتيره

ربي يسعدك يارب

 

توقيع n3omh  

 










نقرتين لعرض الصورة في صفحة مستقلةMY L!fe !s P!nky

 

n3omh غير متواجد حالياً   رد مع اقتباس
 

منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
قديم 20-09-2012, 09:20 PM   #5

Hanan Mahammed

أمي جنتي ..*

الصورة الرمزية Hanan Mahammed

 
تاريخ التسجيل: Aug 2012
كلية: كلية الحاسبات وتقنية المعلومات
التخصص: computer science
نوع الدراسة: إنتظام
المستوى: السابع
البلد: جــــدة
الجنس: أنثى
المشاركات: 47
افتراضي رد: [CPCS 204] الدرس الثاني: Searching Techniques

شرح جميل ومنسق ومفهوم ايضآآآ ^^
الله يزيدك علم ويجعله في موازين حسنآآتك ^^
ويعطيك العافيــه ..

,.,.,.,

 

Hanan Mahammed غير متواجد حالياً   رد مع اقتباس
 

منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
قديم 21-09-2012, 11:10 AM   #6

Hamsa }~

ولسوف يعطيك ربك فترضى ♥

الصورة الرمزية Hamsa }~

 
تاريخ التسجيل: May 2010
كلية: كلية الحاسبات وتقنية المعلومات
التخصص: CS
نوع الدراسة: إنتظام
المستوى: متخرج
البلد: منطقة مكة المكرمة
الجنس: أنثى
المشاركات: 5,602
افتراضي رد: [CPCS 204] الدرس الثاني: Searching Techniques

جزآك الله خير .. :)

 

توقيع Hamsa }~  

 

● سُبحان من يُربّت علينا حين يَصدُ كُل شَيء
و يَحنو عَلينا إذا قسى كُل شَيء ،
سُبحان من نحنُ بدونه لسنا بشَيء وبه كُل شَيء.* ♥

 

Hamsa }~ غير متواجد حالياً   رد مع اقتباس
 

منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
قديم 23-09-2012, 10:20 PM   #7

Tony7

جامعي

الصورة الرمزية Tony7

 
تاريخ التسجيل: Oct 2010
التخصص: Finally CS ^_^
نوع الدراسة: إنتظام
المستوى: السادس
الجنس: ذكر
المشاركات: 167
افتراضي رد: [CPCS 204] الدرس الثاني: Searching Techniques

يعطيك العافية

 

توقيع Tony7  

 





I Hope Know what's in Your Mind's and What's The End

 

Tony7 غير متواجد حالياً   رد مع اقتباس
 

منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
قديم 27-09-2012, 12:13 PM   #8

kkaauu

Toma Bwz

الصورة الرمزية kkaauu

 
تاريخ التسجيل: Mar 2011
التخصص: IT =)
نوع الدراسة: إنتظام
المستوى: الخامس
الجنس: أنثى
المشاركات: 195
افتراضي رد: [CPCS 204] الدرس الثاني: Searching Techniques

Mashallah mjhoooood tshkr 3leeh

allah y36eek al-3afea

 

توقيع kkaauu  

 

million friends is not a miracle
the miracle is to make a friend who will
stand by you when millions are against you

\
/

 

kkaauu غير متواجد حالياً   رد مع اقتباس
 

منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
قديم 28-09-2012, 05:51 AM   #9

Glow diamond

جامعي

الصورة الرمزية Glow diamond

 
تاريخ التسجيل: Nov 2011
التخصص: cs
نوع الدراسة: إنتظام
المستوى: الخامس
الجنس: أنثى
المشاركات: 14
افتراضي رد: [CPCS 204] الدرس الثاني: Searching Techniques

وعليكم السلام ورحمة الله وبركاته .
جعلك الله كغيث إذا أقبل استبشر به الناس وإذا حط نفعهم وإن رحل ظل أثره لهم وبارك الله لك في علمك وعملك .
الله يعطيك العافيه يارب .

 

توقيع Glow diamond  

 


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

 

Glow diamond غير متواجد حالياً   رد مع اقتباس
 

منتديات طلاب وطالبات جامعة الملك عبد العزيز منتديات طلاب وطالبات جامعة الملك عبد العزيز
قديم 29-09-2012, 10:12 PM   #10

~The pearl~

جامعي

الصورة الرمزية ~The pearl~

 
تاريخ التسجيل: Oct 2010
نوع الدراسة: إنتظام
المستوى: الرابع
الجنس: أنثى
المشاركات: 365
افتراضي رد: [CPCS 204] الدرس الثاني: Searching Techniques

الله يعطيك العآفيه .. شرح مرتب ووآضح مآشآء الله ..

 

توقيع ~The pearl~  

 

 

~The pearl~ غير متواجد حالياً   رد مع اقتباس
 

إضافة رد

أدوات الموضوع إبحث في الموضوع
إبحث في الموضوع:

البحث المتقدم
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

 


الساعة الآن 03:52 AM


Powered by vBulletin® Version 3.8.9 Beta 3
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Ads Organizer 3.0.3 by Analytics - Distance Education

أن كل ما ينشر في المنتدى لا يمثل رأي الإدارة وانما يمثل رأي أصحابها

جميع الحقوق محفوظة لشبكة سكاو

2003-2023