חיפוש בינארי

דוגמה לפעילות האלגוריתם ומציאת הערך "7" מתוך מערך ערכים נתון

חיפוש בינארי (ידוע גם בשם אריה במדבר) הוא אלגוריתם לחיפוש, כלומר למציאת מקומו של איבר במערך ממוין. סוג החיפוש הנ״ל נקרא "בינארי" מכיוון שהאלגוריתם מחפש או בצד הימני או בצד השמאלי של המערך. ישנם רק 2 מקרים אפשריים, ולכן החיפוש "בינארי".

מטרה

נתון מערך ממוין בגודל , ויש למצוא את מקומו של איבר מסוים במערך. במעבר סדרתי על איברי המערך נמצא את מיקום האיבר בסיבוכיות . חיפוש בינארי מאפשר למצוא את מיקום האיבר בסיבוכיות של , כלומר ביעילות גבוהה במידה ניכרת.

תיאור האלגוריתם

עקרון

נבדוק את האיבר האמצעי שבמערך הנתון (הממוין כך שהאיבר השמאלי ביותר בו הוא הקטן ביותר, והאיבר הימני ביותר הוא הגדול ביותר במערך). אם האיבר האמצעי הוא האיבר המבוקש, הרי מצאנו את שחיפשנו ונסיים כאן. אם לא, נבדוק מה יחס הסדר בין האיברים. אם האיבר המבוקש קטן יותר מאיבר זה, נבחר את חציו השמאלי של המערך (שבו כל האיברים קטנים מהאיבר האמצעי). אם האיבר המבוקש גדול יותר, נבחר את חציו הימני של המערך (שבו כל האיברים גדולים מהאיבר האמצעי). כעת נחזור על כל מה שעשינו עם תת-המערך שבחרנו. במקרה הגרוע ביותר, שבו באף אחד מהמקרים לא היה האיבר האמצעי האיבר אותו אנו מבקשים, נגיע לתת-מערך בעל איבר אחד, שהוא האיבר המבוקש (או שנגיע למסקנה שהאיבר המבוקש כלל אינו נמצא במערך).

מימוש מילולי

הנחות והבהרות: המערך ממוין כך שהאיבר השמאלי ביותר הוא הקטן ביותר. האיבר המבוקש נמצא במערך. גישה למקום מסוים במערך תתבצע כך: מערך[מקום_מסוים]. השמת ערך במשתנה תתבצע על ידי הסימן <- (חץ) ואילו בדיקת שוויון תתבצע על ידי הסימן = (שווה).

חיפוש_בינארי (תחילת_מערך, סוף_מערך, ערך_מבוקש)

  1. אמצע <- 2 / (תחילת_מערך + סוף_מערך)
  2. אם מערך[אמצע] = ערך_מבוקש
    1. החזר אמצע
  3. אחרת,
    1. אם מערך[אמצע] < ערך_מבוקש
      1. חיפוש_בינארי (אמצע + 1, סוף_מערך, ערך_מבוקש)
    2. אחרת,
      1. חיפוש_בינארי (תחילת_מערך, אמצע - 1, ערך_מבוקש)

שפת C

מימוש רקורסיבי עבור מערך בגודל N:

 int BinarySearch(int* a,int x, int left, int right)
 {
   if(left>right)
     return -1;

   int middle = (left+right)/2;
   if(a[middle]==x)
     return middle;

   if(x<a[middle])
     return BinarySearch(a,x,left,middle-1);

   return BinarySearch(a,x,middle+1,right);
 }

מימוש רגיל עבור מערך בגודל N:

 int BinarySearch(int* a,int x, int left, int right)
 {
   int left = 0;
   int right = N - 1;
   int middle;
   while (left <= right) {
     middle = floor((left + right)/2);
     if (a[middle] > x)
       right = middle - 1;
     else
       if (a[middle] < x)
         left = middle + 1;
       else
         return middle;
   }
   return -1;
 }

פסאודו- קוד

מימוש רקורסיבי עבור מערך בגודל N:

BinarySearch(a[0..N-1], x, left, right) {
  if (right < left)
    return not_found
  middle = floor((left + right)/2)
  if (a[middle] > x)
    return BinarySearch(a, x, left, middle-1)
  else if (a[middle] < x)
    return BinarySearch(a, x, middle+1, right)
  else
    return middle
}

מימוש רגיל עבור מערך בגודל N:

BinarySearch(a[0..N-1], x) {
  left = 0
  right = N - 1
  while (left <= right) {
    middle = floor((left + right)/2)
    if (a[middle] > x)
      right = middle - 1
    else if (a[middle] < x)
      left = middle + 1
    else
      return middle
  }
  return not_found
}

חישוב הסיבוכיות

בידינו מערך בגודל כלומר יש בו איברים. בכל איטרציה (הפעלת האלגוריתם) אנו מצמצמים את המערך לחצי מגודלו, שכן אנו בטוחים שהאיבר אינו בחצי המערך השני ולכן אין אנו בודקים אותו יותר. לאחר איטרציה אחת יהיה גודל המערך , לאחר שתי איטרציות יהיה גודלו , לאחר שלוש איטרציות יהיה גודל המערך וכן הלאה. התהליך ייגמר במקרה הגרוע ביותר כאשר יישאר מערך בגודל 1. אם התהליך כולו יימשך איטרציות, יהיה גודל המערך . אנו דורשים שגודל זה יהיה 1 ולכן נדרוש . נוציא משני אגפי המשוואה ונקבל כי .

קיבלנו כי סיבוכיות התהליך היא . כלומר מספר הפעולות שאנו עושים קטן משמעותית (לוגריתמית) ממספר איברי המערך.

דוגמת הרצה

נסתכל על מערך המספרים: 1,1,2,3,5,8,13,21,34,55. סדרה זו ידועה בשם סדרת פיבונאצ'י, אך לצורך העניין כל שמעניין אותנו הוא עובדת היותם של מספרים אלה מסודרים בסדר עולה. כעת נסתכל על מערך שמכיל סדרה זו.

0 1 2 3 4 5 6 7 8 9
1 1 2 3 5 8 13 21 34 55

שימו לב שהערכים בשורה העליונה הם המקומות במערך (Indexes), ("מחשב" מתחיל לספור מהספרה אפס ולכן המיקום/האינדקס הראשון הוא 0 ולא 1) ואילו הערכים בשורה התחתונה הם הנתונים הנשמרים במערך (Values). לדוגמה, במקום השלישי במערך (אינדקס 2) שמור הערך 2.

ננסה לחפש כעת, באמצעות אלגוריתם אריה במדבר, האם המספר 2 מופיע במערך. במערך עשרה איברים ולכן .

1. אמצע <- 2 / (תחילת_מערך + סוף_מערך)

תחילת_מערך הוא מספורו של התא הראשון ובמקרה זה 1 ולו סוף_מערך הוא מספורו של התא האחרון, במקרה זה 10. 10+1=11 ואם נחלק ב-2 נקבל 5 (אם אנו מעגלים כלפי מטה). אמצע כעת יהיה שקול למספר 5.

2. אם מערך[אמצע] = ערך_מבוקש

ערכו של המערך במקום החמישי הוא 5 וזה לא שווה לערך המבוקש, 2. לכן נדלג על שלב זה ונמשיך מיד לכיוון ה"אחרת".

3. אחרת,

3.1 אם מערך[אמצע] < ערך_מבוקש
5 אינו קטן מ-2 ולכן נמשיך אל עבר ה"אחרת" של תנאי זה.
3.2 אחרת,
3.2.1 חיפוש_בינארי (תחילת_מערך, אמצע, ערך_מבוקש)
משמע יש לשחזר את התהליך כולו אך הפעם סוף_מערך יהיה 5 ולא 10.

1. אמצע <- 2 / (תחילת_מערך + סוף_מערך)

תחילת_מערך הוא מספורו של התא הראשון ובמקרה זה 1 ולו סוף_מערך הוא מספורו של התא האחרון, במקרה זה 5. 5+1=6 ואם נחלק ב-2 נקבל 3.

2. אם מערך[אמצע] = ערך_מבוקש ערכו של המערך במקום השלישי הוא 2 וזהו בדיוק הערך שבקשנו ולכן נכנס לתנאי זה ונמלא אחר ההוראות שם.

2.1 החזר אמצע
אנו מחזירים את המספר 3.

האלגוריתם החזיר 3, משמע שהמספר 2 קיים במערך והוא נמצא בתא מספר 3 ואכן זה נכון.

מקורות השמות

השם "חיפוש בינארי" נובע מכך שהאלגוריתם בוחר בכל שלב לחפש באיבר שמחלק את תחום החיפוש לשני חלקים בגודל שווה. מקור השם "אריה במדבר" מגיע מבדיחה על הדרך שבה מחפש מתמטיקאי אריה במדבר: המתמטיקאי מסתכל על המדבר, מחלקו לשני חלקים ובודק היכן נמצא האריה. כעת הוא ניגש לחלק המתאים וחוזר על פעולותיו עד שהוא מגיע לאריה.

לקריאה נוספת

קישורים חיצוניים

ויקישיתוף מדיה וקבצים בנושא חיפוש בינארי בוויקישיתוף

Read other articles:

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Februari 2023. SMA Negeri 2 SidoarjoInformasiDidirikan16 Juli 1986AkreditasiAJumlah kelas12 kelas setiap tingkatJurusan atau peminatanIPA IPS BahasaRentang kelasX IPA, X IPS, X Bahasa XI IPA, XI IPS, XI Bahasa XII IPA, XII IPS, XII BahasaKurikulumKurikulum 2013...

 

William Henry Harrison Presiden Amerika Serikat 9Masa jabatan4 Maret 1841 – 4 April 1841Wakil PresidenJohn Tyler (1841) PendahuluMartin Van BurenPenggantiJohn TylerAmerika Serikat Menteri ke KolombiaMasa jabatan24 Mei 1828 – 26 September 1829Dicalonkan olehJohn Quincy Adams PendahuluBeaufort WattsPenggantiThomas MooreSenator Amerika Serikat dari OhioMasa jabatan4 Maret 1825 – 20 Mei 1828 PendahuluEthan BrownPenggantiJacob BurnetAnggota Amerika Serikat Dewa...

 

French Traditionalist Catholic bishop His Excellency, The Most ReverendBernard Tissier de MalleraisSSPXBishop of the Society of Saint Pius XBishop Bernard Tissier de Mallerais, c. 2019OrdersOrdination29 June 1975by Marcel LefebvreConsecration30 June 1988by Marcel LefebvrePersonal detailsBorn (1945-09-14) 14 September 1945 (age 78)Sallanches, Haute-Savoie, FranceNationalityFrenchDenominationRoman CatholicPrevious post(s) Rector of the International Seminary of Saint Pius X...

Sphaeristerium (Latin; from the Greek σφαιριστήριον; from σφαῖρα, ball) is a term in Classical architecture given to a large open space connected with the Roman thermae for exercise with balls after the bather had been anointed. They were also provided in Roman villas. Sports Sferisterio delle Cascine at Florence, 19th century In Italian sferisterio is nowadays the courtfield for tamburello and two different pallone varieties: pallone col bracciale and pallone elastico. Th...

 

Election in Michigan Main article: 1920 United States presidential election 1920 United States presidential election in Michigan ← 1916 November 2, 1920 1924 → All 15 Michigan votes to the Electoral College   Nominee Warren G. Harding James M. Cox Party Republican Democratic Home state Ohio Ohio Running mate Calvin Coolidge Franklin D. Roosevelt Electoral vote 15 0 Popular vote 762,865 233,450 Percentage 72.76% 22.27% County Results Harding  ...

 

Russian Greco-Roman wrestler Murat Kardanov Medal record Men's Greco-Roman wrestling Representing  Russia Olympic Games 2000 Sydney 76 kg World Championships 1993 Stockholm 82 kg World Cups 1992 Besancon 82 kg 1995 Schifferstadt 82 kg European Championships 1993 Istanbul 82 kg 1998 Minsk 76 kg 2000 Moscow 76 kg Murat Nausbievich Kardanov (Russian: Мурат Наусбиевич Карданов; Adyghe: Къардэн Мурат, Нэусби и къуэ) (born January 4, 1971, in Zarag...

This article may need to be rewritten to comply with Wikipedia's quality standards, as Sections do nothing to explain what this movie is for.. You can help. The talk page may contain suggestions. (November 2023)1999 Japanese filmGohattoGohatto (御法度)Directed byNagisa ŌshimaWritten byNagisa ŌshimaBased onShinsengumi Keppūrokuby Ryōtarō ShibaProduced byMasayuki MotomochiStarringRyuhei MatsudaTakeshi KitanoTadanobu AsanoCinematographyToyomichi KuritaEdited byTomoyo ŌshimaMusic byRyuic...

 

La disseminazione è il processo mediante il quale i semi delle piante spermatofite pervengono in un terreno adatto alla germinazione. Indice 1 Modalità di dispersione 2 Bibliografia 3 Voci correlate 4 Altri progetti 5 Collegamenti esterni Modalità di dispersione I meccanismi mediante cui avviene la disseminazione sono di varia natura. Alcune tipologie di disseminazione utilizzano mezzi propri della pianta: dispersione barocora o barocoria, quando avviene per effetto della gravità durante ...

 

2020年夏季奥林匹克运动会波兰代表團波兰国旗IOC編碼POLNOC波蘭奧林匹克委員會網站olimpijski.pl(英文)(波兰文)2020年夏季奥林匹克运动会(東京)2021年7月23日至8月8日(受2019冠状病毒病疫情影响推迟,但仍保留原定名称)運動員206參賽項目24个大项旗手开幕式:帕维尔·科热尼奥夫斯基(游泳)和马娅·沃什乔夫斯卡(自行车)[1]闭幕式:卡罗利娜·纳亚(皮划艇)&#...

United States historic placeMurry Guggenheim HouseU.S. National Register of Historic PlacesNew Jersey Register of Historic Places Guggenheim LibraryShow map of Monmouth County, New JerseyShow map of New JerseyShow map of the United StatesLocationCedar and Norwood Avenues, West Long Branch, New Jersey, U.S.Coordinates40°16′56″N 74°0′12″W / 40.28222°N 74.00333°W / 40.28222; -74.00333Area7 acres (2.8 ha)Built1903 (1903)–1905 (1905)ArchitectCa...

 

Genus of chaoyangopterid pterosaur from the Early Cretaceous ChaoyangopterusTemporal range: Early Cretaceous, 120 Ma PreꞒ Ꞓ O S D C P T J K Pg N ↓ Comparison of azhdarchoid mandibles, notice Chaoyangopterus (L) Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Order: †Pterosauria Suborder: †Pterodactyloidea Family: †Chaoyangopteridae Subfamily: †Chaoyangopterinae Genus: †ChaoyangopterusWang & Zhou, 2003 Species: †C. zhangi B...

 

Boost gauge on a Ford Focus RS (left) boost gauge adalah pengukur tekanan yang menunjukkan tekanan udara berjenis atau tekanan turbocharger atau supercharger di mesin pembakaran internal. Mereka umumnya dipasang pada dashboard, di sisi pilar pengemudi, atau dalam slot radio. Referensi Boost-gauges.com - Related info with images.[pranala nonaktif permanen]

Canadian politician John Bruce c. 1869 John Bruce (or Brousse; died 26 October 1893) was the first president of the Métis provisional government at the Red River Colony during the Red River Rebellion of 1869. He resigned because he was sick and his secretary, Louis Riel, became the president.[1] The son of Pierre Bruce and Marguerite Desrosiers, he was a carpenter by trade. Bruce married Angélique Gaudry; they had five children. He was a member of the Legislative Assembly of Assinib...

 

Munisipalitas Gorje Občina GorjeMunisipalitasLokasi di SloveniaNegara SloveniaLuas • Total116 km2 (45 sq mi)Populasi (2013) • Total2.874 • Kepadatan25/km2 (64/sq mi)Kode ISO 3166-2SI-207Situs webhttp://www.gorje.si/ Munisipalitas Gorje adalah salah satu dari 212 munisipalitas di Slovenia. Kode ISO 3166-2 munisipalitas ini adalah SI-207. Menurut sensus 2013, jumlah penduduk munisipalitas yang luasnya 116 kilometer persegi ini a...

 

فرنسيسكو يارا (بالإسبانية: Francisco Jara)‏    معلومات شخصية الميلاد 3 فبراير 1941   غوادالاخارا  الوفاة 2 فبراير 2024 (82 سنة) [1]  غوادالاخارا[2]  مركز اللعب مهاجم  الجنسية المكسيك  المسيرة الاحترافية  سنواتفريقمبارياتأهداف1960–1971 غوادالاخارا -المنتخب...

Bagian dari seri artikel mengenaiMekanika kuantum H ^ | ψ ( t ) ⟩ = i ℏ ∂ ∂ t | ψ ( t ) ⟩ {\displaystyle {\hat {H}}|\psi (t)\rangle =i\hbar {\frac {\partial }{\partial t}}|\psi (t)\rangle } Persamaan Schrödinger Pengantar Glosarium Sejarah Buku teks Latar belakang Mekanika klasik Teori kuantum lama Notasi Bra–ket Hamiltonian Interferensi Dasar-dasar Bilangan kuantum Dekoherensi Fluktuasi kuantum Fungsi gelombang Keruntuhan fungsi gelo...

 

Pour les articles homonymes, voir Shenandoah. CSS Shenandoah Un dessin au crayon du CSS Shenandoah, par son capitaine James Iredell Waddell Autres noms Sea King (1863-1864)El Madjidi (1866-1872) Type Voilier trois-mâts mixte Histoire A servi dans  Confederate States Navy Commanditaire Confederate States Navy Chantier naval Alexander Stephen & Sons, Écosse Commandé 1863 Lancement 17 août 1863 Statut Démantelé (échouage à Zanzibar en 1872) Équipage Équipage 109 officiers et ...

 

French artist (1804–1856) You can help expand this article with text translated from the corresponding article in French. (March 2019) Click [show] for important translation instructions. Machine translation, like DeepL or Google Translate, is a useful starting point for translations, but translators must revise errors as necessary and confirm that the translation is accurate, rather than simply copy-pasting machine-translated text into the English Wikipedia. Do not translate text that...

German general and politician (1792–1850) Friedrich Wilhelm, Count BrandenburgFriedrich Wilhelm Graf von BrandenburgMinister President of PrussiaIn office2 November 1848 – 6 November 1850MonarchFrederick William IVPreceded byErnst von PfuelSucceeded byOtto Theodor von ManteuffelForeign minister of PrussiaIn office8 November – 4 December 1848MonarchFrederick William IVPreceded byAugust von DönhoffSucceeded byHans von BülowIn office30 April – 21 July 1849Pre...

 

Actions of Australian women in the second world war Two members of the Women's Auxiliary Australian Air Force working on a Consolidated B-24 Liberator heavy bomber in 1944 Australian women during World War II played a larger role than women had during World War I. Military service Many women wanted to play an active role in the war and hundreds of voluntary women's auxiliary and paramilitary organisations had been formed by 1940. These included the Women's Transport Corps, Women's Flying Club...