SW練習中估算時間、記憶體限制輔助方法
阿新 • • 發佈:2018-12-19
1.記憶體限制
無論是SW.adv 還是SW.pro 題目中都有 “儲存限制 256MB\512MB” 解題同時,我們需要使用一些估算方法和措施,進行除錯
1.1 大概估算
//二維int陣列 10005*10005
//估算,1_0000_0000 int * 4 bit /1024*1024 約等於 381.5MB
private static int[][] pool = new int[size][size];
//如果題目限制為256MB 執行後則會出現下面的Exception
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at sw. test.CheckMemory.main(CheckMemory.java:24)
1.2 在IDE中設定VM Option
如下圖所示 在IDEA中 Run configuration 設定VM options 測試程式碼
package sw.test;
public class CheckMemory {
private static int size = 1_0005;
//private static int[][] pool = new int[size][size];
/* 如果題目的記憶體限制在256M,可在Run configuration的 VM Option
新增引數中新增 -Xmx256m
本例中 二維int陣列 10005*10005
估算,1_0000_0000 int * 4 bit /1024*1024 約等於 381.5MB
在修改為 -Xmx512m後,不在OutOfMemoryError
*/
public static void main(String[] args) {
//TO-Do
// 測試的程式碼段
int[][] pool = new int[size][size];
}
}
2。時間限制
無論是SW.adv 還是SW.pro 題目中都有 “時間限制 1.0s\2.0s\3.0s”
2.1 大概估算
程式碼中 計算\執行 1_0000_0000次, 大概需時間1秒
2.2 使用程式碼計算
package sw.test;
import java.util.Random;
public class CheckMemory {
private static int size = 1_0005;
//private static int[][] pool = new int[size][size];
/* 如果題目的記憶體限制在256M,可在Run configuration的 VM Option
新增引數中新增 -Xmx256m
本例中 二維int陣列 10005*10005
估算,1_0000_0000 int * 4 bit /1024*1024 約等於 381.5MB
在修改為 -Xmx512m後,不在OutOfMemoryError
*/
public static void main(String[] args) {
//估演算法:程式碼中 計算\執行 1_0000_0000次, 大概需時間1秒
//簡單測試法:
long startTime = System.currentTimeMillis(); //獲取開始時間
//TO-Do
// 測試的程式碼段
Random random = new Random(startTime);
int[][] pool = new int[size][size];
for (int i = 0; i <pool.length; i++) {
for (int j = 0; j < pool.length; j++) {
pool[i][j] = random.nextInt();
}
}
long endTime = System.currentTimeMillis(); //獲取結束時間
System.out.println("程式執行時間: " + (endTime - startTime) + "ms");
}
}
程式執行時間: 932ms