- 3
- 0
- 约3.88千字
- 约 5页
- 2016-12-03 发布于重庆
- 举报
斐波那契堆
斐波那契堆
一、堆的结构
堆中各个有序树的树根之间用双向循环链表连接。每颗有序树中兄弟节点之间用双向循环链表连接。
每个节点拥有fa,child,last,next四个指针:分别指向父节点、任意一个子节点、左右相邻的兄弟节点。
每个节点还记录dat,du,mark三个值:分别表示关键字的值、度数(子节点个数)、剪枝标记。一个指针p,指向所有树根中关键字最小的那个。通过这个指针可以访问该斐波那契堆。
二、堆的操作
(1)插入一个节点x(Insert)
创建一棵仅含有节点x的树,并插入到斐波那契堆的树根链表中
更新指针P指向的节点(如果需要)
(2)查询最小值(GetMin)
直接返回指针P指向的节点的关键字值由于斐波那契堆中的所有树均满足最小堆性质,
因此最小值就是所有树根关键字的最小值。
(3)合并两个斐波那契堆(Merge/Union)
将两个斐波那契堆的树根链表连接起来(连接两个双向循环链表)
更新指针P指向的节点(如果需要)
(4)删除(Delete)
Delete = Decrease + Extract
即首先把要删除的节点的关键值减小为负无穷大,然后删除最小节点。
(5)修改关键字的值(Change)
减小关键字的值 = Decrease
增大关键字的值 = Delete + Insert
即首先删除要修改的节点,再重新插入该节点。
三、复杂度
插入、查询最小值、合并两个斐波那契堆、合并堆中两个有序树的实际代价和平摊代价
均为为O(1)。定义φ(DS)=k*根节点数 + 2*带标记节点数(常数k不妨设为1)。
抽取最小节点:
实际代价为遍历根节点和遍历桶的代价,O(根节点数)+O(logN)?
合并后树根的度数各不相同,因此合并后最多有logN个树根,所以势能函数的改变为
Δφ(DS) = logN – 根节点数。
平摊代价为:(根节点数+logN) + (logN–根节点数) = O(logN)
四、具体实现:
#include iostream
#include cstring
#include cstdlib
#define du(x) heap[x].du
#define fa(x) heap[x].fa
#define ch(x) heap[x].child
#define r(x) heap[x].next
#define l(x) heap[x].last
#define mark(x) heap[x].mark
typedef long long ll;
using namespace std;
const int mx = 1000000;
int v[mx];
int p,n,m;
struct Fibonacci_Heap
{
int du,fa,child,next,last,mark;
} heap[mx];
vectorint a[25]; ///桶
ll d[mx]; ///距离数组
int head[mx],cnt;
struct N
{
int from,to,w,next;
} edge[mx];
///链式前向星(用数组模拟的邻接链表)
void add(int from,int to,int w)
{
edge[cnt].to = to;
edge[cnt].from = from;
edge[cnt].w = w;
edge[cnt].next = head[from];
head[from] = cnt++;
}
///向邻接链表中添加一条由from到to的边,且权重为w
void Link(int x,int y)
{
if(!x||!y) return;
l(r(x))=l(y),r(l(y))=r(x);
r(x)=y,l(y)=x;
}
/// 此方法将x点与y点相连
void Cut(int x)
{
if(ch(fa(x))==x) ch(fa(x))=r(x)==x?0:r(x);
du(fa(x))--;
r(l(x))=r(x),l(r(x))=l(x);
l(x)=r(x)=x;
fa(x)=mark(x)=0;
}
/// 次方法将x点从堆中切除
void Insert(int x)
{
l(x)=r(x)=x,v[x]=1;
Link(x,p);
if(d[x]d[p]) p=x;
}
///将点x插入到堆中
void Decrease(int x)
{
if(!fa(x))
{
if(d[x]d[p]) p=x;
您可能关注的文档
- 建筑行业中的挂靠经营问题分析.doc
- 工程项目挂靠财务管理操作及制度简述.doc
- 张学良大事年表.docx
- 心理学(一).doc
- 心理学相关论文.doc
- 必修三_区域地理发展问题归纳.doc
- 成都军区总医院门诊医技楼改扩建项目基坑及周边建筑主体建筑变监测工程.doc
- 我国城市交通需求管理综述3.doc
- 成立泰国公司.doc
- 我国区域治理存在的问题及对策研究.doc
- 伟明环保-市场前景及投资研究报告-境内业务稳健运行,印尼市场贡献边际增量.pdf
- 桂东县法院系统招聘考试真题2025.pdf
- 贵州省黔南布依族2026年中考三模物理试题及答案.pdf
- 贵州省黔南州2026年中考语文二模试卷附答案.pdf
- 贵州省铜仁市2026年中考语文二模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套完整答案详解.docx
- 贵州省毕节市2026年中考语文一模试卷附答案.pdf
- 贵州省贵阳市南明区2026年中考语文一模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套参考答案详解.docx
- 贵州省贵阳市白云区2026年中考二模物理试题附答案.pdf
最近下载
- 2013款比亚迪M6新版电路图(含488、电动滑门及全景影像).pdf VIP
- CECS19-1990 混凝土排水管道工程闭气检验标准.docx VIP
- DB21_T 4245-2025 地理标志产品 抚顺林下参.docx VIP
- DB21_T 4246-2025 农产品地理标志产品 新宾大米.docx VIP
- DB21_T 4249-2025 林下辽细辛种植技术规程.docx VIP
- 2026年深圳中考历史命题趋势预测试卷(附答案可下载).docx VIP
- 2026年深圳中考物理命题趋势预测试卷(附答案可下载).docx VIP
- 高维空间的时空紧致化.pdf
- 林下种植实施方案.docx VIP
- [臺 灣文獻叢刊077]天妃顯聖錄.pdf VIP
原创力文档

文档评论(0)