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

شبكة ابن الخليج

Sitemap | Archive | Tag Could
التسجيلالبحثمشاركات اليوماجعل جميع المنتديات مقروءةالأرشيفاعلن معنا





البحث الثنائي (1) Binary Search

مناقشة موضوع البحث الثنائي (1) Binary Search في دروس لغات البرمجة; بسم الله الرحمن الرحيم في محاولة لتوضيح طريقة من أسرع طرق البحث في البرمجة، سيفيدك أخي القارئ هذا الدروس بإذن الله طريقة البحث الثنائي Binary Search: يصادف المبرمج دوماً العمل مع كمية بيانات كبيرة مخزن ...

العودة منتدى ابن الخليج> منتديات تعليمية> دروس لغات البرمجة

{ مِنَ الْمُؤْمِنِينَ رِجَالٌ صَدَقُوا مَا عَاهَدُوا اللَّهَ عَلَيْهِ فَمِنْهُم مَّن قَضَى نَحْبَهُ وَمِنْهُم مَّن يَنتَظِرُ وَمَا بَدَّلُوا تَبْدِيلاً } الأحزاب23

حادثة الإفك - تفسير ابن كثير وشرح عثمان الخميس



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

رد
 
LinkBackأدوات الموضوعطرق مشاهدة الموضوع
قديم 05-28-2006, 01:08 مساءً   #1 (permalink)
اسرة ابن الخليج
 
الصورة الرمزية الهوى ماهو كلام
 
تاريخ التسجيل: Jul 2005
الدولة: *K S A*
المشاركات: 4,815
معدل تقييم المستوى: 659الهوى ماهو كلام نشيطالهوى ماهو كلام نشيطالهوى ماهو كلام نشيطالهوى ماهو كلام نشيطالهوى ماهو كلام نشيطالهوى ماهو كلام نشيطالهوى ماهو كلام نشيطالهوى ماهو كلام نشيطالهوى ماهو كلام نشيطالهوى ماهو كلام نشيطالهوى ماهو كلام نشيط
إرسال رسالة عبر مراسل ICQ إلى الهوى ماهو كلامإرسال رسالة عبر مراسل MSN إلى الهوى ماهو كلامإرسال رسالة عبر مراسل Skype إلى الهوى ماهو كلام
افتراضيالبحث الثنائي (1) Binary Search

بسم الله الرحمن الرحيم
في محاولة لتوضيح طريقة من أسرع طرق البحث في البرمجة، سيفيدك أخي القارئ هذا الدروس بإذن الله search
طريقة البحث الثنائي Binary Search:
يصادف المبرمج دوماً العمل مع كمية بيانات كبيرة مخزنة في مصفوفة، ومن الضروري أن يستخدم تكنيك معين يحدد له ما إذا كان العنصر الذي يبحث عنه key ينتمي إلى هذه المصفوفة أم لا! هذا التكنيك يطلق عليه "البحث" وله عدة أنواع، من أشهرها وأكثرها فاعلية طريقة البحث الثنائي.
ولكي نطبق أحد خوارزميات الـBinary Search على مصفوفة ما نتبع الخطوات البسيطة التالية:
  1. الخطوة الأولى والأهم والتي لا يمكن تطبيق الـBinary Search لولاها هي:
    ترتيب المصفوفة تصاعدياً أو تنازلياً أو أبجدياً على حسب نوع البيانات المخزنة فيها!
  2. تحديد أول عنصر في المصفوفة ولنسمه i، وآخر عنصر فيها ولنسمه مثلاً j.
  3. تحديد العنصر الذي يقع في منتصف هذه المصفوفة ولنسمه k.
بعد ذلك يمكننا تطبيق تكنيك البحث الثنائي على مصفوفتنا، وهناك عدة خوارزميات للبحث الثنائي، سأشرح أحدها في هذا الدرس على مصفوفة ذات بيانات رقمية إن شاء الله. وفي الدرس الثاني سنتعرف على المكتبة الجاهزة والتي توفرها الجافا لتطبيق الـBinary Search على مصفوفة ذات بيانات حرفية strings بإذن الله.
خوارزم البحث الثنائي Binary Search Algorithm:
تقوم فكرة البحث الثنائي على تقسيم المصفوفة إلى نصفين واستبعاد النصف الذي لا ينتمي إليه المفتاح key الذي نبحث عنه، كيف ذلك؟
عن طريق تحديد العنصر الذي يقع في منتصف هذه المصفوفة، ثم نقارن هذا العنصر مع المقتاح الذي نبحث عنه كالتالي (تذكر أن مصفوفتنا مرتبة تصاعدياً أو تنازلياً):
  1. إذا كان يساويه نكون قد وجدنا العنصر الذي نبحث عنه.
  2. إذا كانت قيمة المفتاح أقل من قيمة العنصر الأوسط في المصفوفة، إذن نحتاج أن نبحث فقط في نصف المصفوفة الأول ونستبعد البحث في نصفها الثاني.
  3. وفيما عدا ذلك: إذا كانت قيمة المفتاح أكبر من قيمة العنصر الأوسط في المصفوفة، إذن نحتاج أن نبحث فقط في نصف المصفوفة الثاني ونستبعد البحث في نصفها الأول.
  4. بعد ذلك: نطبق نفس الخطوات من 1 إلى 3 في النصف الجديد الذي نبحث فيه، فنقوم بتقسيمه إلى قسمين، ونقارن المفتاح مع العنصر الأوسط الجديد، بنفس الترتيب الذي ذكر في الخطوات 1 إلى3 السابقة.
سيساعدك المثال التالي على فهم الطريقة إن شاء الله:
نفرض أننا نبحث عن عناصر مختلفة في هذه المصفوفة:
Array[]={0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28}
تابع في هذا الفلاش التسلسل في البحث عن عناصر مختلفة:

والسؤال الآن: كيف نكتب code يمثل هذا الخوارزم بالجافا أو السي؟!
وللإجابة على هذا السؤال سيصادفنا تساؤل آخر: كيف نرتب المصفوفة تصاعدياً او تنازلياً؟!
والإجابة:
لترتيب المصفوفة فهناك عدة خوارزميات للترتيب منها على سبيل المثال: (Bubble sort, sorting by Selection, sorting by Insertion, Shell sort, & Quick sort).
ولا مجال لذكرها الآن، حيث سنعتمد في الـcode على ترتيبنا نحن للمصفوفة بشكل صحيح.
والآن، لنستعرض معاً code يطبق تكنيك binary search على مصفوفة ذات عناصر رقمية بلغة الجافا، حيث أن j=high، i=low, & k=middle :
// Binary search of an array
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;

public class BinarySearch extends JApplet
implements ActionListener {
JLabel enterLabel, resultLabel;
JTextField enter, result;
JTextArea output;

int a[];
String display = "";

public void init()
{
Container c = getContentPane();
c.setLayout( new FlowLayout() );

enterLabel = new JLabel( "Enter key" );
c.add( enterLabel );

enter = new JTextField( 5 );
enter.addActionListener( this );
c.add( enter );

resultLabel = new JLabel( "Result" );
c.add( resultLabel );

result = new JTextField( 22 );
result.setEditable( false );
c.add( result );

output = new JTextArea( 6, 60 );
output.setFont(
new Font( "Courier", Font.PLAIN, 12 ) );
c.add( output );

// create array and fill with even integers 0 to 28
a = new int[ 15 ];

for ( int i = 0; i < a.length; i++ )
a[ i ] = 2 * i;
}

public void actionPerformed( ActionEvent e )
{
String searchKey = e.getActionCommand();

// initialize display string for the new search
display = "Portions of array searchedn";

// perform the binary search
int element = binarySearch( a, Integer.parseInt( searchKey ) );

output.setText( display );

if ( element != -1 )
result.setText("Found value in element " + element );
else
result.setText( "Value not found" );
}

// Binary search
public int binarySearch( int array[], int key )
{
int low = 0; // low subscript
int high = array.length - 1; // high subscript
int middle; // middle subscript

while ( low <= high ) {
middle = ( low + high ) / 2;

// The following line is used to display the part
// of the array currently being manipulated during
// each iteration of the binary search loop.

buildOutput( low, middle, high );

if ( key == array[ middle ] ) // match
return middle;
else if ( key < array[ middle ] )
high = middle - 1; // search low end of array
else
low = middle + 1; // search high end of array
}

return -1; // searchKey not found
}

// Build one row of output showing the current
// part of the array being processed.

void buildOutput( int low, int mid, int high )
{
DecimalFormat twoDigits = new DecimalFormat( "00" );

for ( int i = 0; i < a.length; i++ ) {
if ( i < low || i > high )
display += " ";
else if ( i == mid ) // mark middle element in output
display += twoDigits.format( a[ i ] ) + "* ";
else
display += twoDigits.format( a[ i ] ) + " ";
}

display += "n";
}
}


عدد مرات البحث في أي مصفوفة عن عنصر محدد باستخدام الـBinary Search:
لو تسائلنا عن أقصى عدد من مرات البحث باستخدام الـBinary Search في أي مصفوفة، لوجدنا أنه يُعطى من إيجاد القوة التي يرفع إليها رقم 2 كي يطعينا العدد الذي يزيد عن عناصر المصفوفة بواحد. أي أنه أول قوة لـ2 والتي تُعطي رقم أكبر من عدد عناصر المصفوفة بواحد.
ففي مثالنا: استخدمنا مصفوفة من 15 عنصر، نلاحظ ان العدد الذي يزيد على عدد عناصر المصفوفة بواحد، أي العدد 16 ينتج من القوة الرابعة لرقم2 (2^4=16) وذلك يعني اننا نحتاج على الأكثر لأربع مرات مقارنة في الـBinary Search حتى نجد العنصر الذي نبحث عنه! فمن الممكن أن نجده من أول مرة في المقارنة، ومن الممكن أن نجده في ثاني مرة، أو ثالث مرة أو رابع مرة.. أو أن يكون غير موجود في المصفوفة!
وفي مثال آخر: لو بحثنا في مصفوفة تحوي 1024 عنصر، سنحتاج إلى 10 مرات للمقارنة كحد أقصى، ونعرف ذلك بتكرار قسمة عدد العناصر على رقم 2 إلى أن نصل إلى العدد واحد في خارج القسمة (وسبب ذلك هو أننا بعد كل مقارنة نقوم بإلغاء نصف عناصر المصفوفة من الاعتبار)، فبتكرار قسمة 1024 على رقم 2 نحصل على القيم التالية على الترتيب: 512، 256، 128، 64، 32، 16، 8، 4، 2، ورقم 1. نلاحظ أن العدد 1024 (2^10) قسم على رقم 2 عشر مرات حتى حصلنا على العدد 1.
نستنتج من ذلك، أن القسمة على اثنين تقابل مرة واحدة من المقارنة في الـBinary Search Algorithm. فمصفوفة بـ 1048576 (2^20) عنصر تستلزم على الأكثر 20 مرة من المقارنة حتى نجد العنصر الذي نبحث عنه، ومصفوفة تحوي بليون عنصر، تستلزم على الأكثر إلى 30 مرة من المقارنة حتى نجد العنصر المطلوب فيها!
ترى، كم يوفر لنا هذا التكنيك من الوقت في البحث؟.. فقط 30 مرة من البحث بين بليون عنصر لنجد ضالتنا!!.. إنه تكنيك عبقري فعلاً search





من مواضيع الهوى ماهو كلام في المنتدى
الهوى ماهو كلام غير متواجد حالياً   رد مع اقتباس
قديم 10-22-2006, 03:46 مساءً   #2 (permalink)
اسرة ابن الخليج
 
الصورة الرمزية مبحرفى ذكرياتي
 
تاريخ التسجيل: Jun 2006
الدولة: ذكرياتي
المشاركات: 2,053
معدل تقييم المستوى: 1582مبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيطمبحرفى ذكرياتي نشيط
إرسال رسالة عبر مراسل MSN إلى مبحرفى ذكرياتي
افتراضيمشاركة: البحث الثنائي (1) Binary Search

مشكور أخوي ويعطيك العافية وجزاك الله خيرا ...



من مواضيع مبحرفى ذكرياتي في المنتدى
__________________
الحقيقة دائما تؤلم ... من تعود على الأوهام

همسه : إن كنت تريد أن تصبح محبوبآ من الجميع سليمآ من العيوب فأنت تطلب المستحيل


Dream ||||||||||||||||||||||||||||||||||| 59%
مبحرفى ذكرياتي غير متواجد حالياً   رد مع اقتباس
رد

العبارات الدلالية
search


أدوات الموضوع
طرق مشاهدة الموضوع

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

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

المواضيع المتشابهه
الموضوعكاتب الموضوعالمنتدىمشاركاتآخر مشاركة
[Hack] البحث داخل موديل الاخبار Search in News 1.0ابـن غياثمجلة المنتديات mkPortal1409-04-2007 12:16 صباحاً
[module][all] موديل البحث في التورنت Torrent SearchAn-Drمجلة المنتديات mkPortal406-05-2007 05:05 مساءً
تصميم صفحة البحث (search.asp)ADMINدروس برمجة مواقع605-22-2007 02:50 صباحاً
البحث الثنائي (2) Binary Searchالهوى ماهو كلامدروس لغات البرمجة110-22-2006 03:45 مساءً


منتديات شبكة ابن الخليج

ثقافة بلاد الرافدين شعر المتنبي لسان العرب فاطمة الزهراء جرائم خليجية صور لاهشر الرياضيين انشاد حمل ماركه صحة ألوان مكياج شانيل اصابع لوز ديكورات غرف حمل برامج شبكات برامج مكافحة التجسس حوارات تقنية العاب للبنات العاب عربية ميني العاب XBOX360 مخبز ترافيان ثري دي استوديو ماكس صور رومانسيه احلى المسجات حمل دروس الكمبيوتر و الأنترنت دروس رسم و تصميم دروس فوتوشوب فيديو دروس ايميج ريدي Adobe ImageReadyدروس افتر افكت Adobe After Effect اضافات adobe premiere دروس Adobe Illustrator Digital Photos دروس 3D Studio Max دروس سويتش متقدمة دروس FoxPro دروس Word دروس انظمة تشغيل و هاردوير و شبكاتلينكس و يونكسوندوز WINDOWSدروس لغات البرمجة حمل اروع الهاكات vb3.6.8 مكتبة هاكات قسم ستايلات vBulletinمجلة المنتديات mkPortalقسم ستايلات مجلة المنتديات mkPortal Stylesسكربتات وادوات تطوير المواقعمشاكل وحلول الـ مواقع دعم فني آراءفوتوشوبCinema 4Dخامات فوتوشوبفرش فوتوشوباكشن فوتوشوباشكال فوتوشوبدليل مواقعاكتشف شخصيتكاخبارموسوعة الأطفالبوربوينتtorrentاختصار الروابطPageRankتوقيع لاميلكصانع القليترGlitterبرامج


الساعة تعتمد على توقيت جرينتش +3. الساعة الآن 11:20 صباحاً.
Search Engine Optimization by vBSEO 3.1.0

Valid XHTML 1.0 Transitional Valid CSS!Powered by vBulletin® Version 3.7.1,
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd
شبكة و منتديات حبيبى نت  |  شبكة العربي  |   Feeds:   XML   JS   RSS   RSS Feed