塊狀鍊錶的簡單介紹
塊狀鍊錶,可以說是一種很犯規的資料結構
支援動態的序列加入刪除,詢問區間和之類的操作
同時擁有陣列和鍊錶的優點:
陣列: 所有資料在記憶體中是緊湊儲存的,優點是定位快:o(1)
鍊錶: 通過指標將不同位置的元素鏈結起來:修改快 o(1)
總的來說重要操作只有幾個:
定位,**,插入,合併
塊狀鍊錶基礎操作
雖然說是鍊錶,但是在實現的時候,我們還是用陣列模擬
塊狀鍊錶的空間比較奇怪,每個塊的大小在sq
rt(n
)2−2
sqrt
(n) sqr
t(n)
2−2s
qrt(
n)
,大多數情況下會偏大
初始化
陣列的空間並不優秀,所以我們要時刻節儉,佇列q中記錄的就是可用的結點編號
因此我們申請結點和刪除結點都需要在佇列q的基礎上進行
void init()
int newnode()
void delnode(int t)
在位置p插入一段資料,第一步就是定位
(預設鍊錶起點就是0,鄰接表遍歷,每乙個結點中下標從0開始)
void find(int &pos,int &now) //從第乙個塊開始搜尋,搜尋位置pos所屬的塊的編號
定位完成後,我們需要將該塊**開
不是特別理解memcpy的用法?
簡單來說,如果我們需要把
a a
陣列從i' role="presentation" style="position: relative;">i
i位置開始的長度le
n len
複製到b b
陣列j' role="presentation" style="position: relative;">j
j位置,則 me
mcpy
(b+j
,a+i
,len
) mem
cpy(
b+j,
a+i,
len)
(親測了一下,發現如果是陣列型別只能全部複製,只有字串可以部分copy,難道是我的姿勢不對?)
void fillnode(int
pos,int n,char data,int nxt)
void divide(int
pos,int p)
每次插入刪除之後,我們都要合併一下小結點
void maintain(int
pos) //當前塊與後乙個塊合併
}
大體上來說就是這些東西
**中有些小細節,只要理解到位就沒什麼問題了
記住塊裡的下標從0開始,牽扯到find和divide中的pos一定要大於0
const
int n=1
<<25;
const
int blocksize=20000;
const
int blocknum=n/blocksize*3;
int n;
char s[n+10];
struct node;
node a[blocknum+10];
queue
q;int newnode()
void delnode(int t)
void find(int &pos,int &now)
void fillnode(int pos,int n,char *data,int nxt)
void divide(int now,int pos)
void maintain(int now)
}void insert(int pos,int n)
if (iint t=newnode();
fillnode(t,n-i,s+i,a[now].nxt);
a[now].nxt=t;
}maintain(now);
}void del(int pos,int n)
maintain(now);
}void get(int pos,int n)
if (imemcpy(s+i,a[t].data,n-i);
s[n]=0;
}void init()
只寫過一道個其他演算法結合的題目:塊狀鍊錶+並查集
塊狀鍊錶終極考驗!!!
thrift開發踩坑全紀錄
使用thrift搭建的系統已經穩定執行了一段時間了,該系統是公司的核心流式系統,高峰時qps在40萬。作為目前最流行的rpc框架,thrift不僅提供了通訊協議,同時提供了網路框架,解脫了程式設計師的生產力。thrift也是阿帕奇hadoop系列的rpc實現工具。本文主要聚焦在搭建c 實現的thri...
塊狀鍊錶模板
塊狀鍊錶 下標從0開始 塊大小和塊數設為比sqrt n 稍大 const int n 2000000 10,block sz 4000 100,block num 4000 10 queue que int head char str n struct block g block num int n...
塊狀鍊錶(STL rope)
塊狀鍊錶 stl rope 首先介紹一下塊狀鍊錶。我們都知道 陣列 具有 o 1 的查詢時間,o n 的刪除,o n 的插入。鍊錶 具有 o n 的查詢時間,o 1 的刪除,o 1 的插入。既然陣列和鍊錶各有優劣,那麼我們為何不將鍊錶和陣列組合起來,一起來均攤時間呢?做法就是維護乙個鍊錶,鍊錶中的每...