国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) php教程 PHP資料結(jié)構(gòu):堆資料結(jié)構(gòu)的奧妙,實(shí)現(xiàn)高效率的排序與優(yōu)先權(quán)佇列

PHP資料結(jié)構(gòu):堆資料結(jié)構(gòu)的奧妙,實(shí)現(xiàn)高效率的排序與優(yōu)先權(quán)佇列

Jun 01, 2024 pm 03:54 PM
堆疊 php資料結(jié)構(gòu)

PHP 中的堆資料結(jié)構(gòu)是一種滿足完全二元樹和堆性質(zhì)(父結(jié)點(diǎn)值大於/小於子結(jié)點(diǎn)值)的樹狀結(jié)構(gòu),使用陣列實(shí)現(xiàn)。堆支援兩種操作:排序(從小到大提取最大元素)和優(yōu)先權(quán)隊(duì)列(根據(jù)優(yōu)先權(quán)提取最大元素),分別透過 heapifyUp 和 heapifyDown 方法維護(hù)堆的性質(zhì)。

PHP資料結(jié)構(gòu):堆資料結(jié)構(gòu)的奧妙,實(shí)現(xiàn)高效率的排序與優(yōu)先權(quán)佇列

PHP 中的堆疊資料結(jié)構(gòu):揭秘排序與優(yōu)先權(quán)佇列的奧秘

堆疊是一種樹狀資料結(jié)構(gòu),它滿足以下兩個(gè)性質(zhì):

  • 完全二元樹性質(zhì):樹中的每個(gè)結(jié)點(diǎn)都有兩個(gè)子結(jié)點(diǎn),或沒有子結(jié)點(diǎn),形成一棵完全二元樹。
  • 堆性質(zhì):每個(gè)父結(jié)點(diǎn)的值都大於(或等於)它的兩個(gè)子結(jié)點(diǎn)的值(最大堆)或小於(或等於)它的兩個(gè)子結(jié)點(diǎn)的值(最小堆)。

PHP 實(shí)作

在 PHP 中,我們使用陣列來實(shí)作堆疊。以下是一個(gè)最大堆的PHP 實(shí)作:

class MaxHeap {
    private $heap = array();
    private $size = 0;

    public function insert($value) {
        $this->heap[$this->size++] = $value;
        $this->heapifyUp($this->size - 1);
    }

    private function heapifyUp($index) {
        if ($index === 0) {
            return;
        }
        $parentIndex = intval(($index - 1) / 2);
        if ($this->heap[$index] > $this->heap[$parentIndex]) {
            $temp = $this->heap[$index];
            $this->heap[$index] = $this->heap[$parentIndex];
            $this->heap[$parentIndex] = $temp;
            $this->heapifyUp($parentIndex);
        }
    }

    public function extractMax() {
        if ($this->size === 0) {
            return null;
        }
        $max = $this->heap[0];
        $this->heap[0] = $this->heap[$this->size - 1];
        $this->size--;
        $this->heapifyDown(0);
        return $max;
    }

    private function heapifyDown($index) {
        $largestIndex = $index;
        $leftIndex = 2 * $index + 1;
        $rightIndex = 2 * $index + 2;
        if ($leftIndex < $this->size && $this->heap[$leftIndex] > $this->heap[$largestIndex]) {
            $largestIndex = $leftIndex;
        }
        if ($rightIndex < $this->size && $this->heap[$rightIndex] > $this->heap[$largestIndex]) {
            $largestIndex = $rightIndex;
        }
        if ($largestIndex !== $index) {
            $temp = $this->heap[$index];
            $this->heap[$index] = $this->heap[$largestIndex];
            $this->heap[$largestIndex] = $temp;
            $this->heapifyDown($largestIndex);
        }
    }
}

實(shí)戰(zhàn)案例

排序:

$heap = new MaxHeap();
$heap->insert(10);
$heap->insert(5);
$heap->insert(15);
$heap->insert(8);
$heap->insert(12);

while ($heap->size > 0) {
    echo $heap->extractMax() . " ";
}

輸出:15 12 10 8 5

優(yōu)先權(quán)佇列:

$heap = new MaxHeap();
$heap->insert(5);
$heap->insert(2);
$heap->insert(3);
$heap->insert(1);

while ($heap->size > 0) {
    $element = $heap->extractMax();
    echo "服務(wù)于元素 " . $element . "\n";
}

輸出:
服務(wù)於元素5
服務(wù)於元素3
服務(wù)於元素2
服務(wù)於元素1

以上是PHP資料結(jié)構(gòu):堆資料結(jié)構(gòu)的奧妙,實(shí)現(xiàn)高效率的排序與優(yōu)先權(quán)佇列的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

heap和stack有什麼差別 heap和stack有什麼差別 Nov 22, 2022 pm 04:12 PM

區(qū)別:1、堆(heap)的空間一般由程式設(shè)計(jì)師分配釋放;而堆疊(stack)的空間由作業(yè)系統(tǒng)自動分配釋放 。 2、heap是存放在二級快取中,生命週期由虛擬機(jī)器的垃圾回收演算法決定;而stack使用的是一級緩存,通常都是被呼叫時(shí)處於儲存空間中,調(diào)用完畢立即釋放。 3.資料結(jié)構(gòu)不同,heap可以被看成是一棵樹,而stack是一種先進(jìn)後出的資料結(jié)構(gòu)。

堆積和棧的區(qū)別 堆積和棧的區(qū)別 Jul 18, 2023 am 10:17 AM

堆和棧的區(qū)別:1、記憶體分配方式不同,堆是由程式設(shè)計(jì)師手動分配和釋放的,而棧是由作業(yè)系統(tǒng)自動分配和釋放的;2、大小不同,棧的大小是固定的,而堆的大小是動態(tài)成長的;3、資料存取方式不同,在堆中,資料的存取是透過指標(biāo)來實(shí)現(xiàn)的,而在堆疊中,資料的存取是透過變數(shù)名稱來實(shí)現(xiàn)的;4、資料的生命週期,在堆中,資料的生命週期可以很長,而在堆疊中,變數(shù)的生命週期是由其所在的作用域來決定的。

java堆和堆疊有哪些差別 java堆和堆疊有哪些差別 Dec 25, 2023 pm 05:29 PM

java堆和堆疊的區(qū)別:1、記憶體分配和管理;2、儲存內(nèi)容;3、執(zhí)行緒執(zhí)行和生命週期;4、效能影響。詳細(xì)介紹:1、記憶體分配和管理,Java堆是動態(tài)分配的記憶體區(qū)域,主要用來儲存物件實(shí)例,在Java中,物件是透過堆疊記憶體進(jìn)行分配的,當(dāng)建立一個(gè)物件時(shí),Java虛擬機(jī)會在堆上分配相應(yīng)的記憶體空間,並自動進(jìn)行垃圾回收和記憶體管理,堆的大小可以在運(yùn)行時(shí)動態(tài)調(diào)整,透過JVM參數(shù)進(jìn)行配置等等。

Python中的Deque: 實(shí)作高效的佇列與堆疊 Python中的Deque: 實(shí)作高效的佇列與堆疊 Apr 12, 2023 pm 09:46 PM

Python 中的 deque 是一個(gè)低階的、高度最佳化的雙端佇列,對於實(shí)現(xiàn)優(yōu)雅、高效的Pythonic 佇列和堆疊很有用,它們是計(jì)算中最常見的列表式資料類型。本文中,雲(yún)朵君將和大家一起學(xué)習(xí)如下:開始使用deque有效地彈出和追加元素訪問deque中的任意元素用deque構(gòu)建高效隊(duì)列開始使用Deque向Python 列表的右端追加元素和彈出元素的操作,一般非常高效。如果用大 O 表示時(shí)間複雜性,那麼可以說它們是 O(1)。而當(dāng) Python 需要重新分配記憶體來增加底層列表以接受新的元素時(shí),這些

PHP資料結(jié)構(gòu):堆資料結(jié)構(gòu)的奧妙,實(shí)現(xiàn)高效率的排序與優(yōu)先權(quán)佇列 PHP資料結(jié)構(gòu):堆資料結(jié)構(gòu)的奧妙,實(shí)現(xiàn)高效率的排序與優(yōu)先權(quán)佇列 Jun 01, 2024 pm 03:54 PM

PHP中的堆資料結(jié)構(gòu)是一種滿足完全二元樹和堆性質(zhì)(父結(jié)點(diǎn)值大於/小於子結(jié)點(diǎn)值)的樹狀結(jié)構(gòu),使用陣列實(shí)作。堆支援兩種操作:排序(從小到大提取最大元素)和優(yōu)先權(quán)隊(duì)列(根據(jù)優(yōu)先權(quán)提取最大元素),分別透過heapifyUp和heapifyDown方法維護(hù)堆的性質(zhì)。

C++中的堆和優(yōu)先隊(duì)列 C++中的堆和優(yōu)先隊(duì)列 Aug 22, 2023 pm 04:16 PM

堆和優(yōu)先佇列是C++中常用的資料結(jié)構(gòu),它們都具有重要的應(yīng)用價(jià)值。本文將分別對堆和優(yōu)先隊(duì)列進(jìn)行介紹和解析,以幫助讀者更好地理解和使用它們。一、堆堆是一種特殊的樹狀資料結(jié)構(gòu),它可以用來實(shí)作優(yōu)先權(quán)佇列。在堆中,每個(gè)節(jié)點(diǎn)都滿足如下性質(zhì):它的值不小於(或不大於)其父節(jié)點(diǎn)的值。它的左右子樹也是一堆。我們將不小於其父節(jié)點(diǎn)的堆稱為“最小堆”,將不大於其父節(jié)點(diǎn)的堆稱為“最大堆”

Go語言中的堆疊、堆疊、字典、紅黑樹等資料結(jié)構(gòu) Go語言中的堆疊、堆疊、字典、紅黑樹等資料結(jié)構(gòu) Jun 03, 2023 pm 03:10 PM

隨著電腦科學(xué)的發(fā)展,資料結(jié)構(gòu)成為了一門重要的學(xué)科。在軟體開發(fā)中,資料結(jié)構(gòu)是非常重要的,它們可以提高程式效率和可讀性,同時(shí)也可以幫助解決各種問題。在Go語言中,堆疊、堆疊、字典、紅黑樹等資料結(jié)構(gòu)也是非常重要的。本文將介紹這些資料結(jié)構(gòu)及其在Go語言中的實(shí)作。堆堆(Heap)是一個(gè)經(jīng)典的資料結(jié)構(gòu),用來解決優(yōu)先隊(duì)列問題。優(yōu)先隊(duì)列指的是一種隊(duì)列,在取出元素的時(shí)候,按照元

Python中的堆和優(yōu)先隊(duì)列的使用場景有哪些? Python中的堆和優(yōu)先隊(duì)列的使用場景有哪些? Oct 28, 2023 am 08:56 AM

Python中的堆和優(yōu)先隊(duì)列的使用場景有哪些?堆是一種特殊的二元樹結(jié)構(gòu),常用於有效率地維護(hù)一個(gè)動態(tài)的集合。 Python中的heapq模組提供了堆的實(shí)現(xiàn),可以方便地進(jìn)行堆的操作。優(yōu)先隊(duì)列也是一種特殊的資料結(jié)構(gòu),不同於普通的佇列,它的每個(gè)元素都有一個(gè)與之相關(guān)的優(yōu)先權(quán)。最高優(yōu)先順序的元素先被取出。 Python中的heapq模組也可以實(shí)現(xiàn)優(yōu)先權(quán)佇列的功能。下面我們介紹一些

See all articles