演算法新解 一

2021-07-30 15:41:17 字數 2649 閱讀 9731

一.前言

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...