一.前言
function
min-free
(a) x <-- 0
loop
if x ∉ a then
return x
else
x <-- x + 1
其中,∉定義如下:
function ∉(x, x)
for i <-- 1 to len(x) do
if x = x[i] then
return false
else
return true
則**的複雜度為o(n^2)
function min-free(a)
f<-- [false, false,...,false] where len(f) = n+1
for x ∈ a do
if x < n then
f[x] <-- true
for i <-- [0,n] do
iff[i] = fales then7
return i
上述**中,a為現有的id系統陣列,初始化陣列中所有元素為false需要o(n)的時間,遍歷a中的所有元素,只要小於n就標記為true,需要o(n)時間,最後線性查詢標誌陣列中第乙個值為false的位置。故複雜度為o(n)。
minfree(a) = search(a, 0, len(a)-1)
search(a,l,u) = l :
a = ∅
search(a'', m+1,u): len(a')=m-l+1
search(a', l, m): 其他
其中有:
m = (l + u) / 2
a' =
a'' =
l和u分別為查詢上下界。
舉例:
a =
①執行search(a,0,9),m=5,則a』=,a」=,此時len(a』)=5-0+1=6,因此執行search(a」,6,10);
②m=8,則a』=,a」=,此時len(a』)≠8-6+1,因此執行search(a』,6,8);
③m=7,則a』=,a」=∅,此時len(a』)=7-6+1=2,因此執行search(a」,8,8);
④此時a為空,因此最小id為8。
該方法相較於方法一更加節省空間,因為方法一需要維護乙個長度為n+1的標誌陣列,當n很大時,空間上的效能代價很高。而方法二中,第一次需要o(n)次比較來劃分子串行a』和a」,第二次僅需要比較o(n/2)次……因此總的的時間複雜度為o(n+n/2+n/4…)=o(2n)=o(n)
function
get-number(n)
x <-- 1
i <-- 0
loop
if valid(x) then
i <-- i+1
if i=n then
return i
x <-- x + 1
function
valid(x)
while x mod
2 = 0
do x <-- x/2
while x mod
3 = 0
do x <-- x/3
while x mod
5 = 0
do x <-- x/5
if x = 1
then
return true
else
return false
(1)初始狀態,佇列僅含有唯一元素1,計算1*2,1*3,1*5,此時佇列變為;
(2)計算2*2,2*3,2*5新產生的元素4、6、10按順序插入佇列,此時佇列變為;
(3)計算3*2,3*3,3*5產生元素6,9,15,由於6重複,故捨棄,佇列變為;
...
演算法複雜度o(1+2+3+…+n)=o(n^2)
function
get-number
(n) if n=1
then
return
1else
q2 <--
q3 <--
q5 <--
while n > 1
do x <-- min(head(q2), head(q3), head(q5))
if x = head(q2) then
dequeue(q2)
enqueue(q2, 2x)
enqueue(q3, 3x)
enqueue(q5, 5x)
else
if x = head(q3) then
dequeue(q3)
enqueue(q3, 3x)
enqueue(q5, 5x)
else
dequeue(q5)
enqueue(q5, 3x)
n <-- n-1
return x
演算法迴圈n次,每次迴圈都從佇列中取出最小的乙個元素,需要常數時間,接著根據取出取出元素所在的佇列,產生1~3個新元素放入佇列,這一步也是常數時間,因此複雜度為o(n) 等價類分法 新解
1 等價類分法的基本概念 等價類分法是將 測試空間劃分成若干個子集,並且滿足每個子集中的任一資料對揭露程式中的缺陷都是等價的,這些子集就叫做等價類或者叫等價子集。比如乙個程式的輸入資料滿足 0其他為無效資料,那麼就可以劃分成兩個等價類,乙個是有效資料的等價類,另乙個是無效資料的等價類,設計測試用例時...
貪心演算法 (新手易懂)
貪心演算法的意思就是求乙個問題時求它的子問題的最優解,從而求得問題的最優解,貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。下面講解例題 例題大致意思就是,給你每乙個節目的開始時間和結束時間,...
ABAP語法新特徵 一)
data l str type string.現在可能是這樣的 data l str china select but000 partner,but000 name org1,but000 bu group,lfa1 nodel from but000 inner join lfa1 on but0...