第二章 數(shù)據(jù)結(jié)構(gòu)與數(shù)學(xué)基礎(chǔ)

遞歸方程求解

常系數(shù)線性同質(zhì)遞歸方程

常系數(shù)線性同質(zhì)遞歸方程.png

非同質(zhì)遞歸方程

非同質(zhì)遞歸方程1.png

非同質(zhì)遞歸方程2.png

非同質(zhì)遞歸方程2.png

Master Theorem

Master Theorem.png

有n個(gè)節(jié)點(diǎn)的堆T,可以用一個(gè)數(shù)組H[1...n]表示。

  • 根節(jié)點(diǎn)存儲在H[1]
  • T的節(jié)點(diǎn)x存在H[j]中,左右孩子節(jié)點(diǎn)在H[2j]和H[2j+1]
  • H[j]的父節(jié)點(diǎn)如果不是根節(jié)點(diǎn),則存儲在H[j/2]
    堆.png

堆的基本操作

DELETE.png

INSERT.png

刪除和插入時(shí)間負(fù)載度均為O(log_n)
SIFT-DOWN.png

SIFT-UP.png
#include<iostream>
using namespace std;
const n 1000;
int SIFT_UP(int h[n],int i)
{
    bool done=false;
    if(i==1) return 0;
    while(i==1||done)
    {
        if(h[i]>h[i/2])
        {
            int temp=h[i];
            h[i]=h[i+1];
            h[i+1]=temp;
        }
        else{
            i/=2;
            done=true;
        }
    }
    return 0;
}
int SIFT_DOWN(int h[n],int i)
{
    bool done=false;
    if(2*i>strlen(h)) return 0;
    while(2*i>strlen(h)||done)
    {
        i=2*i;
        if(i+1<=n&&h[i+1]>h[i]) i+=1;
        if(h[i/2]<h[i])
        {
            int temp=h[i];
            h[i]=h[i/2];
            h[i/2]=h[i];
        }
        else done=true;
    }
    return 0;
}
int DELETE(int h[n],int i)
{
    int x=h[i],y=h[n];
    n-=n;
    if(i=n+1) return 0;
    h[i]=y;
    if(y>x) SIFT_UP(h,i);
    else SIFT_DOWN(h,i);
}
int DELETEMAX(int h[n])
{
    int x=h[1];
    DELETE(h,1);
    return x;
}
void MAKEHEAP(int a[n])
{
    for(int i=n/2;i>=1;i--) SIFT_DOWN(a,i);
}
void HEAPSORT(int a[n])
{
    MAKEHEAP(a);
    for(int j=n;j>=2;j--)
    {
        int temp=a[1];
        a[1]=a[j];
        a[j]=a[1];
    }
    SIFT_DOWN(a,1);
}

不相交集

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容