1. 請說明下列演算法的時間復雜度。
(1)O(n)。外層for循環O(n);內層for循環O(1),因為是常數個循環;x+=2為O(1)。則總的時間復雜度為O(n)。
(2)O(n^2)。外層for循環O(n);內層for循環O(n);兩者都是線性時間復雜度。x++為O(1)。則總的時間復雜度為O(n^2)。
2. 請說明下列演算法的時間復雜度
你想問的具體問題是??
如果你是想問這個自定義函數運行的過程:
(1)
自定義函數接收來自主函數的參數
定義整型變數i,x=0
i=0
如果i<n+1
執行for括弧裡面的內容:for(j=1;j<8;j++)遇到for語句,同理
j=1,如果j<8,執行x+=2;然後執行for語句j++,再判斷j<8,執行x+=2、、、、、、、、、
直到j<8不成立,跳出最裡面的for語句
執行外面的for語句,i++
執行for括弧裡面的內容:for(j=1;j<8;j++)遇到for語句,同理
j=1,如果j<8,執行x+=2;然後執行for語句j++,再判斷j<8,執行x+=2、、、、、、、、、
直到j<8不成立,跳出最裡面的for語句
直到判斷i<n+1條件否定
退出自定義函數,返回到主函數
這夠詳細了吧,同理(2)也是這樣類似的過程,希望這是你要的答案,記得給點獎勵我
3. 下列關於演算法的說法中,正確的是
正確的說法是 D. 演算法是解決問題過程所需的有限步驟。
演算法的性質規定了演算法必須滿足以下幾點:
1 具體(能翻譯成機器指令)
2 明確(無歧義)
3 正確(對任何輸入能給出正確的結果)
4 步數有限(任何情況下總能停機,不會陷入死循環)
4. 下列關於演算法的說法中,正確的是()A.演算法是某個問題的解決過程B.演算法可以無限不停地操作下去C.
由演算法的概念可知:
演算法是某個問題的解決方法,而不是某個問題的解決過程,故A不正確;
演算法是在有限個步驟內解決問題,不可以無限不停地操作下去,故B不正確;
演算法的每一步操作都是明確的,演算法執行後的結果是確定的,故C不正確;
解決某類問題的演算法可能有多個,演算法是不唯一的,故D正確.
故選D.
5. 下列關於演算法的說法中,正確的是() A.演算法就是一個問題的解題過程 B.一個演算法只能解決一個
由演算法的概念可知: 演算法不是一個問題的解題過程,演算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟. 或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題,故A,B錯; 求解某一類問題的演算法不是唯一的,故C正確; 演算法的概念可知:演算法是有限步,結果明確性,D是不正確的. 故選C. |
6. 下列演算法的功能是什麼
實現的功能:把L的第一個節點移動到最後一個節點的位置。這樣看就能好理解了,加了一個大括弧。
LinkList testl(LinkList L)
ListNode *p,*p;
if(L&&L->next)
{
q=L; /*保存L最初的,第一個節點位置,在後面需要用到*/
L=L->next;p=L;
while(p->next)
{
p=p->next;
} /*找L的最後節點位置*/
p->next=q;q->next=NULL;
return L;
}
7. 1.3 請說明下列演算法的時間復雜度.
這個首先要明確一點,只用到比較的排序演算法最低時間復雜度是O(nlogn),而像桶排這樣的只需要O(R)(R為桶的大小)。
為了證明只用到比較的排序演算法最低時間復雜度是O(nlogn),首先要引入決策樹。
首先決策樹是一顆二叉樹,每個節點表示元素之間一組可能的排序,它予以京進行的比較相一致,比較的結果是樹的邊。
先來說明一些二叉樹的性質,令T是深度為d的二叉樹,則T最多有2^片樹葉。
具有L片樹葉的二叉樹的深度至少是logL。
所以,對n個元素排序的決策樹必然有n!片樹葉(因為n個數有n!種不同的大小關系),所以決策樹的深度至少是log(n!),即至少需要log(n!)次比較。
8. 簡述以下演算法的功能。
第一個演算法是把無頭結點單鏈表的第一個節點變到最後一個,使第二個節點變為頭結點,原來的頭結點變為最後一個。
第二個演算法是把原來的單循環鏈表的一部分元素取出來,具體說就是從pa到pb前一個節點(包括pa而不包括pb)取出來,組成新的單循環鏈表。
9. 簡述下列演算法的功能
隊列Q中的元素反轉順序。例如,設剛開始隊列Q中元素為1、2、3、4,調用該方法後,隊列Q中元素順序變為4、3、2、1。
10. 分析下列演算法的復雜度
答:主要看雙重循環部分,外層循環執行n次,內層循環執行m次,總共執行次數為m×n次,對應時間復雜度為O(n^2)。