Κοινή χρήση τεχνολογίας

[Algorithm JavaScript] Binary Search: Εντοπίστε γρήγορα το στοιχείο προορισμού

2024-07-12

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

Εισαγάγετε την περιγραφή της εικόνας εδώ

🔥 个人主页:κενό ποίημα

Εισαγάγετε την περιγραφή της εικόνας εδώ

Εισαγάγετε την περιγραφή της εικόνας εδώ

Η δυαδική αναζήτηση είναι ένας αποτελεσματικός αλγόριθμος αναζήτησης κατάλληλος για τον γρήγορο εντοπισμό στοιχείων στόχου σε διατεταγμένους πίνακες. Σε σύγκριση με τη γραμμική αναζήτηση, η χρονική πολυπλοκότητα της δυαδικής αναζήτησης είναι O(log n), η οποία είναι πιο αποτελεσματική. Αυτό το άρθρο θα εισαγάγει λεπτομερώς την αρχή, την υλοποίηση και την εφαρμογή του αλγορίθμου δυαδικής αναζήτησης.


1. Αρχή αλγορίθμου

Η δυαδική αναζήτηση εντοπίζει γρήγορα το στοιχείο-στόχο μειώνοντας συνεχώς το εύρος αναζήτησης στο μισό. Τα βασικά βήματα είναι τα εξής:

  1. Το αρχικό εύρος αναζήτησης είναι ο δείκτης έναρξης και ο δείκτης τέλους του πίνακα.
  2. Υπολογίστε τον ενδιάμεσο δείκτη.
  3. Συγκρίνει το στοιχείο στο μεσαίο ευρετήριο με το στοιχείο στόχο.
    • Εάν είναι ίσο, το στοιχείο στόχος βρίσκεται και το ευρετήριό του επιστρέφεται.
    • Εάν το στοιχείο προορισμού είναι μικρότερο από το στοιχείο στο μεσαίο ευρετήριο, περιορίστε το εύρος αναζήτησης στο αριστερό μισό.
    • Εάν το στοιχείο προορισμού είναι μεγαλύτερο από το στοιχείο στο μεσαίο ευρετήριο, περιορίστε το εύρος αναζήτησης στο δεξί μισό.
  4. Επαναλάβετε τα παραπάνω βήματα μέχρι να αδειάσει η περιοχή αναζήτησης ή να βρεθεί το στοιχείο προορισμού.


2. Υλοποίηση αλγορίθμου

Ακολουθεί η εφαρμογή JavaScript της δυαδικής αναζήτησης:

/**
 * 二分查找算法
 * @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. Σενάρια εφαρμογής

  1. Διατεταγμένη αναζήτηση πίνακα: Εντοπίστε γρήγορα στοιχεία σε έναν ταξινομημένο πίνακα.
  2. Λύνω προβλήματα: Χρησιμοποιείται για την επίλυση ορισμένων αλγοριθμικών προβλημάτων που απαιτούν δυαδική αναζήτηση, όπως η εύρεση στοιχείων κορυφής σε έναν πίνακα.
  3. ανάλυση δεδομένων: Στην ανάλυση δεδομένων, η δυαδική αναζήτηση χρησιμοποιείται για τη γρήγορη εύρεση της θέσης μιας συγκεκριμένης τιμής.

4. Βελτιστοποίηση και επέκταση

  1. Αναδρομική υλοποίηση: Εκτός από την επαναληπτική υλοποίηση, η δυαδική αναζήτηση μπορεί επίσης να υλοποιηθεί αναδρομικά.
/**
 * 递归实现二分查找算法
 * @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. Βρείτε την πρώτη ή την τελευταία εμφάνιση του: Με τη δυαδική αναζήτηση, ο αλγόριθμος μπορεί να επεκταθεί για να βρει τη θέση του πρώτου ή του τελευταίου στοιχείου στόχου σε έναν ταξινομημένο πίνακα.

5. Περίληψη

Η δυαδική αναζήτηση είναι ένας αποτελεσματικός αλγόριθμος αναζήτησης που μπορεί να εντοπίσει γρήγορα το στοιχείο στόχο σε έναν ταξινομημένο πίνακα μειώνοντας συνεχώς στο μισό το εύρος αναζήτησης. Η κατανόηση και η κατοχή του αλγορίθμου δυαδικής αναζήτησης έχει μεγάλη σημασία για την επίλυση πολλών πρακτικών προβλημάτων και τη βελτιστοποίηση της απόδοσης του προγράμματος. Ελπίζω ότι αυτό το άρθρο θα σας βοηθήσει να κατανοήσετε και να εφαρμόσετε τη δυαδική αναζήτηση.