基本演算法 其他

2021-03-31 08:56:30 字數 3177 閱讀 2216

七 進製轉換

1任意正整數進製間的互化

除n取餘

2實數任意正整數進製間的互化

乘n取整

3負數進製:

設計乙個程式,讀入乙個十進位制數的基數和乙個負進製數的基數,並將此十進位制數

轉換為此負 進製下的數:-r∈

八 全排列與組合的生成

1排列的生成:(1..n)

procedure solve(dep:integer);

vari:integer;

begin

if dep=n+1 then begin writeln(s);exit; end;

for i:=1 to n do

if not used[i] then begin

s:=s+chr(i+ord('0'));used[i]:=true;

solve(dep+1);

s:=copy(s,1,length(s)-1); used[i]:=false;

end;

end;

2組合的生成(1..n中選取k個數的所有方案)

procedure solve(dep,pre:integer);

vari:integer;

begin

if dep=k+1 then begin writeln(s);exit; end;

for i:=1 to n do

if (not used[i]) and (i>pre) then begin

s:=s+chr(i+ord('0'));used[i]:=true;

solve(dep+1,i);

s:=copy(s,1,length(s)-1); used[i]:=false;

end;

end;

九.查詢演算法

1折半查詢

function binsearch(k:keytype):integer;

var low,hig,mid:integer;

begin

low:=1;hig:=n;

mid:=(low+hig) div 2;

while (a[mid].key<>k) and (low<=hig) do begin

if a[mid].key>k then hig:=mid-1

else low:=mid+1;

mid:=(low+hig) div 2;

end;

if low>hig then mid:=0;

binsearch:=mid;

end;

2樹形查詢

二叉排序樹:每個結點的值都大於其左子樹任一結點的值而小於其右子樹任一結點的值。查詢

function treesrh(k:keytype):pointer;

var q:pointer;

begin

q:=root;

while (q<>nil) and (q^.key<>k) do

if kgoal then begin 

move(k-1,6-now-goal); 

writeln(k moved from now to goal);

h[goal,h[goal,0]+1]:=h[now,nowp]; h[now,nowp]:=0;

inc(h[goal,0]); dec(h[now,0]);

move(k-1,goal);

end;

十二、dfs框架

noip2001 數的劃分

procedure work(dep,pre,s:longint);

var j:longint;

begin

if dep=n then begin

if s>=pre then inc(r); exit;

end;

for j:=pre to s div 2 do work(dep+1,j,s-j);

end;

類似:procedure try(dep:integer);

var i:integer;

begin

if dep=k then begin

if tot>=a[dep-1] then inc(sum);

exit; end;

for i:=a[dep-1] to tot div 2 do begin

a[dep]:=i; dec(tot,i);

try(dep+1);

inc(tot,i);

end;

end;

十三、bfs框架

ioi94 房間問題

head:=1; tail:=0;

while tail=1) and (i<=l.len) then

while j

loc:=p;

end;

2.單鏈表的插入操作

procedure insert(l:linklist; i:integer; x:datatype);

var p,q:pointer;

begin

p:=loc(l,i);

new(q);

q^.data:=x;

q^.next:=p^.next;

p^.next:=q;

inc(l.len);

end;

3.單鏈表的刪除操作

procedure delete(l:linklist; i:integer);

var p,q:pointer;

begin

p:=loc(l,i-1);

q:=p^.next;

p^.next:=q^.next;

dispose(q);

dec(l.len);

end;

4.雙鏈表的插入操作(插入新結點q)

p:=loc(l,i);

new(q);

q^.data:=x;

q^.pre:=p;

q^.next:=p^.next;

p^.next:=q;

q^.next^.pre:=q;

5.雙鏈表的刪除操作

p:=loc(l,i);

p^.pre^.next:=p^.next;

p^.next^.pre:=p^.pre;

dispose(p);

其他基本操作

1.0 索引 索引是一種與表有關的結構,它的作用相當於書的目錄,可以根據目錄中的頁碼快速找到所需的內容。當表中有大量記錄時,若要對錶進行查詢,沒有索引的情況是全表搜尋 將所有記錄一一取出,和查詢條件進行一一對比,然後返回滿足條件的記錄。這樣做會消耗大量資料庫系統時間,並造成大量磁碟 i o 操作。而...

其他高階演算法

1.普里姆演算法 prim 演算法 圖論中的一種演算法,可在加權連通圖里搜尋最小生成樹。意即由此演算法搜尋到的邊子集所構成的樹中,不但包括了連通圖里的所有頂點 英語 vertex graph theory 且其所有邊的權值之和亦為最小。2 克魯斯卡爾演算法 求加權連通圖 的最小生成樹的演算法 kru...

其他常用演算法

base64 不是安全領域下的加解密演算法,只是乙個編碼演算法,通常用於把二進位制資料編碼為可寫的字元形式的資料,特別適合在 協議下的網路快速傳輸資料。utf 8 和gbk 中文的base64 編碼結果是不同的。採用 base64 編碼不僅比較簡短,同時也具有不可讀性,即所編碼的資料不會被人用肉眼所...