數(shù)據(jù)結(jié)構(gòu)基本概念和基本理論串講+習(xí)題答案+復(fù)習(xí)要點(diǎn)(2)

字號(hào):

◆ (2)成立。
    ◆ (3)成立。
    ◆ (4)不成立。
    1.5 設(shè)有兩個(gè)算法在同一機(jī)器上運(yùn)行,其執(zhí)行時(shí)間分別為100n^2和2^n,要使前者快于后者,n至少要多大?
    ◆ 15
    ◇ 最簡(jiǎn)單最笨的辦法就是拿自然數(shù)去代唄。假定n取為10,則前者的值是10000,后者的值是1024,小于前者,那我們就加個(gè)5,用15代入得前者為 22500,后者為32768,已經(jīng)比前者大但相差不多,那我們?cè)贉p個(gè)1,用14代入得,前者為19600,后者為16384,又比前者小了,所以結(jié)果得出來就是n至少要是15.
    1.6 設(shè)n為正整數(shù),利用大"o"記號(hào),將下列程序段的執(zhí)行時(shí)間表示為n的函數(shù)。
    (1) i=1; k=0
    while(i
    { k=k+10*i;i++;
    } ◆ t(n)=n-1
    ∴ t(n)=o(n)
    ◇ 這個(gè)函數(shù)是按線性階遞增的
    (2) i=0; k=0;
    do{
    k=k+10*i; i++;
    }
    while(i<> ◆ t(n)=n
    ∴ t(n)=o(n)
    ◇ 這也是線性階遞增的
    (3) i=1; j=0;
    while(i+j<=n)
    {
    if (i
    else i++;
    } ◆ t(n)=n/2
    ∴ t(n)=o(n)
    ◇ 雖然時(shí)間函數(shù)是n/2,但其數(shù)量級(jí)仍是按線性階遞增的。
    (4) x=n; // n>1
    while (x>=(y+1)*(y+1))
    y++; ◆ t(n)=n 1/2
    ∴ t(n)=o(n 1/2 )
    ◇ 最壞的情況是y=0,那么循環(huán)的次數(shù)是n 1/2 次,這是一個(gè)按平方根階遞增的函數(shù)。
    (5) x=91; y=100;
    while(y>0)
    if(x>100)
    {x=x-10;y--;}
    else x++; ◆ t(n)=o(1)
    ◇ 這個(gè)程序看起來有點(diǎn)嚇人,總共循環(huán)運(yùn)行了1000次,但是我們看到 n 沒有? 沒。這段程序的運(yùn)行是和n無(wú)關(guān)的,就算它再循環(huán)一萬(wàn)年,我們也不管他,只是一個(gè)常數(shù)階的函數(shù)。
    1.7 算法的時(shí)間復(fù)雜度僅與問題的規(guī)模相關(guān)嗎?
    ◆ no,事實(shí)上,算法的時(shí)間復(fù)雜度不僅與問題的規(guī)模相關(guān),還與輸入實(shí)例中的元素取值等相關(guān),但在最壞的情況下,其時(shí)間復(fù)雜度就是只與求解問題的規(guī)模相關(guān)的。我們?cè)谟懻摃r(shí)間復(fù)雜度時(shí),一般就是以最壞情況下的時(shí)間復(fù)雜度為準(zhǔn)的。
    1.8 按增長(zhǎng)率由小至大的順序排列下列各函數(shù):
    2^100, (2/3)^n,(3/2)^n, n^n , , n! ,2^n ,lgn ,n^lgn, n^(3/2),√n
    ◇ 分析如下: 2^100 是常數(shù)階; (2/3)^n 和 (3/2)^n 是指數(shù)階,其中前者是隨n的增大而減小的; n^n 是指數(shù)方階; √n 是方根階, n! 就是n(n-1)(n-2)... 就相當(dāng)于n次方階; 2^n 是指數(shù)階, lgn 是對(duì)數(shù)階 , n^lgn 是對(duì)數(shù)方階, n^(3/2) 是 3/2 次方階。根據(jù)以上分析按增長(zhǎng)率由小至大的順序可排列如下:
    ◆ (2/3)^n < 2^100 < lgn < √n < n^(3/2) < n^lgn < (3/2)^n < 2^n < n! < n^n
    1.9 有時(shí)為了比較兩個(gè)同數(shù)量級(jí)算法的優(yōu)劣,須突出主項(xiàng)的常數(shù)因子,而將低次項(xiàng)用大"o"記號(hào)表示。例如,設(shè)t1(n)=1.39nlgn+100n+256= 1.39nlgn+o(n), t2(n)=2.0nlgn-2n=2.0lgn+o(n), 這兩個(gè)式子表示,當(dāng)n足夠大時(shí)t1(n)優(yōu)于t2(n),因?yàn)榍罢叩某?shù)因子小于后者。請(qǐng)用此方法表示下列函數(shù),并指出當(dāng)n足夠大時(shí),哪一個(gè)較優(yōu),哪一個(gè)較劣?
    函 數(shù) 大"o"表示 優(yōu)劣
    (1) t1(n)=5n^2-3n+60lgn ◆ 5n^2+o(n) ◆ 較差
    (2) t2(n)=3n^2+1000n+3lgn ◆ 3n^2+o(n) ◆ 其次
    (3) t3(n)=8n^2+3lgn ◆ 8n^2+o(lgn) ◆ 最差
    (4) t4(n)=1.5n^2+6000nlgn ◆ 1.5n^2+o(nlgn) ◆