軟體工程第三次作業 效能分析

2022-06-23 06:54:14 字數 1994 閱讀 4793

要求0:以 戰爭與和平 作為輸入檔案,重讀向由檔案系統讀入。連續三次執行,給出每次消耗時間、cpu引數。

第一次執行結果:

本次程式執行所消耗的時間為1.2秒。

第二次執行結果:

本次程式執行所消耗的時間為936毫秒。

第三次執行結果:

本次程式執行所消耗的時間為975毫秒。

要求1:給出你猜測程式的瓶頸。你認為優化會有最佳效果,或者在上週在此處做過優化 (或考慮到優化,因此更差的**沒有寫出) 。

上週的**我使用的是結構體陣列來對分割好的單詞進行儲存並採用氣泡排序,效果非常不理想,統計完war_and_peace.txt這個檔案需要7秒左右。

struct words

;

while (feof(fp) == 0)

else}}

這周**儲存單詞採用了雜湊表儲存並採用快速排序,效果有了顯著的提公升,統計war_and_peace.txt這個檔案僅需要900毫秒左右。

hashtable strtab = new hashtable();

for (int i = 0; i < strarr.length; i++)

else}}

因為雜湊表有查詢效率高的優點,所以改用了雜湊表之後執行速度有了明顯的提公升。

要求2:通過 profile 找出程式的瓶頸。給出程式執行中最花費時間的3個函式(或**片斷)。要求包括截圖。

本程式中,以上三個函式最花費時間。

上面三個函式中最花費時間的是statistics函式,因為函式中有對字串進行分割的操作:

string strarr = str.split(ch);
上面**通過split()函式對字串進行分割,導致花費的時間非常多。

要求3:根據瓶頸,"盡力而為"地優化程式效能。

本人嘗試過乙個字元乙個字元的讀取,當讀取到自定義的分隔符後,將讀取出來的字串存入到雜湊表中,但是這個方法更慢,所以目前最優的方案是就是用split()函式來對字串進行分割。

要求4:再次 profile,給出在 要求1 中的最花費時間的3個函式此時的花費。要求包括截圖。

由於本人無力對程式進行優化,所以此時最花費時間的三個函式沒有變。

軟體工程第三次作業

影印機的工作過程大致如下 未接到影印命令時處於 閒置 狀態,一旦接到 影印命令 則進入 影印 狀態,完成乙個影印命令 規定的工作後又回到閒置狀態,等待下乙個影印命令 如果執行影印命令時 發現沒紙 則進入 缺紙 狀態,發出警告,等待裝紙,裝滿紙 後進入閒置狀態,準備接收影印命令 如果影印時發生 卡紙故...

軟體工程第三次作業

最大連續子陣列和 最大子段和 問題 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整數均為負數時定義子段和為0,依此定義,所求的最優值為 max,1 i j n 例如,當 a 1 a 2 a 3 a 4 a 5 a...

軟體工程第三次作業

這個作業屬於哪個課程 這個作業要求在 這個作業的目標 1 對比原型設計工具 2 需求分析 3 原型設計 因為之前對原型設計一點了解都沒有,所以我選擇通過對這三款軟體的第一印象以及後面的深入了解的方式來對比這三款原型設計工具的不同之處 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img...