Teknologian jakaminen

[JavaScript-algoritmi] Binäärihaku: Paikanna kohdeelementti nopeasti

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Lisää kuvan kuvaus tähän

🔥 个人主页:tyhjä runo

Lisää kuvan kuvaus tähän

Lisää kuvan kuvaus tähän

Binaarihaku on tehokas hakualgoritmi, joka soveltuu kohdeelementtien nopeaan paikantamiseen järjestetyistä taulukoista. Lineaariseen hakuun verrattuna binäärihaun aikamonimutkaisuus on O(log n), mikä on tehokkaampaa. Tässä artikkelissa esitellään yksityiskohtaisesti binäärihakualgoritmin periaate, toteutus ja käyttö.


1. Algoritmin periaate

Binäärihaku paikantaa nopeasti kohdeelementin puolittamalla hakualueen jatkuvasti. Perusvaiheet ovat seuraavat:

  1. Alkuperäinen hakualue on taulukon aloitus- ja loppuindeksi.
  2. Laske väliindeksi.
  3. Vertaa keskiindeksin elementtiä kohdeelementtiin.
    • Jos yhtä suuri, kohdeelementti löydetään ja sen indeksi palautetaan.
    • Jos kohdeelementti on pienempi kuin keskiindeksin elementti, kavenna hakualue vasemmalle puolelle.
    • Jos kohdeelementti on suurempi kuin keskiindeksin elementti, kavenna hakualue oikealle puolelle.
  4. Toista yllä olevia vaiheita, kunnes hakualue on tyhjä tai kohdeelementti löytyy.


2. Algoritmin toteutus

Seuraava on binäärihaun JavaScript-toteutus:

/**
 * 二分查找算法
 * @param {number[]} arr - 有序数组
 * @param {number} target - 目标元素
 * @return {number} - 目标元素的索引,未找到返回 -1
 */
function binarySearch(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    
    if (arr[mid] === target) {
      return mid; // 找到目标元素
    } else if (arr[mid] < target) {
      left = mid + 1; // 查找右半部分
    } else {
      right = mid - 1; // 查找左半部分
    }
  }

  return -1; // 未找到目标元素
}

// 示例
const arr = [1, 3, 5, 7, 9, 11, 13];
const target = 7;
const index = binarySearch(arr, target);
console.log(index); // 输出: 3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

3. Sovellusskenaariot

  1. Tilattu taulukkohaku: Paikanna nopeasti elementit järjestetystä taulukosta.
  2. ratkaista ongelmia: Käytetään tiettyjen algoritmisten ongelmien ratkaisemiseen, jotka edellyttävät binaarihakua, kuten huippuelementtien löytämiseen taulukosta.
  3. tietojen analysointi: Data-analyysissä binäärihakua käytetään tietyn arvon sijainnin nopeaan löytämiseen.

4. Optimointi ja laajentaminen

  1. Rekursiivinen toteutus: Iteratiivisen toteutuksen lisäksi binäärihaku voidaan toteuttaa myös rekursiivisesti.
/**
 * 递归实现二分查找算法
 * @param {number[]} arr - 有序数组
 * @param {number} target - 目标元素
 * @param {number} left - 左索引
 * @param {number} right - 右索引
 * @return {number} - 目标元素的索引,未找到返回 -1
 */
function binarySearchRecursive(arr, target, left = 0, right = arr.length - 1) {
  if (left > right) {
    return -1; // 未找到目标元素
  }

  const mid = Math.floor((left + right) / 2);

  if (arr[mid] === target) {
    return mid; // 找到目标元素
  } else if (arr[mid] < target) {
    return binarySearchRecursive(arr, target, mid + 1, right); // 查找右半部分
  } else {
    return binarySearchRecursive(arr, target, left, mid - 1); // 查找左半部分
  }
}

// 示例
const indexRecursive = binarySearchRecursive(arr, target);
console.log(indexRecursive); // 输出: 3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  1. Etsi ensimmäinen tai viimeinen esiintymä: Binäärihaulla algoritmia voidaan laajentaa etsimään järjestetyn taulukon ensimmäisen tai viimeisen kohdeelementin sijainti.

5. Yhteenveto

Binäärihaku on tehokas hakualgoritmi, joka voi paikantaa nopeasti kohdeelementin järjestetyssä taulukossa puolittamalla hakualuetta jatkuvasti. Binäärihakualgoritmin ymmärtäminen ja hallitseminen on erittäin tärkeää monien käytännön ongelmien ratkaisemisessa ja ohjelman suorituskyvyn optimoinnissa. Toivon, että tämä artikkeli auttaa sinua ymmärtämään ja soveltamaan binaarihakua.