การปรับแต่งโค้ดใน Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
การเข้าใจ space complexity มีความสำคัญในการสร้างแอปพลิเคชันที่:
OutOfMemoryErrorรูปแบบสัญกรณ์เหมือนกับ time complexity
คลาสความซับซ้อนที่พบบ่อย:
O(1): Constant time — ไม่ขึ้นกับขนาด inputO(n): Linear time — เพิ่มตามขนาด inputO(n²): Quadratic time — เพิ่มแบบยกกำลังสองตามขนาด inputpublic int findMax(int[] array) {
int max = Integer.MIN_VALUE;
for (int value : array) {
if (value > max) {
max = value;
}
}
return max;
}
ไม่ว่า array จะมี 10 หรือ 10 ล้านสมาชิก ใช้หน่วยความจำสำหรับตัวแปรเพียงตัวเดียวคือ max
Space complexity คือ O(1) หรือ constant space
public int[] doubleValues(int[] array) {
int[] result = new int[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = array[i] * 2;
}
return result;
}
n สมาชิก จะต้องการพื้นที่สำหรับสมาชิกเพิ่มอีก n ตัวO(n) เนื่องจากหน่วยความจำที่ต้องการเพิ่มขึ้นเป็นเส้นตรงตามขนาด inputpublic int[][] multiplicationTable(int n) {
int[][] table = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
table[i][j] = (i + 1) * (j + 1);
}
}
return table;
}
n เป็น 10 ต้องการ 100 ช่อง; ถ้า n เป็น 100 ต้องการ 10,000 ช่องO(n²)หน่วยความจำเป็นทรัพยากรที่มีจำกัด!
ตัวอย่างก่อนหน้าเมื่อใช้งานจริง สำหรับ input ขนาด 10,000 สมาชิก:
findMax, O(1) -> ใช้หน่วยความจำเพิ่มเพียงไม่กี่ bytedoubleValues, O(n) -> ใช้หน่วยความจำเพิ่มประมาณ 40KBmultiplicationTable, O(n²) -> ใช้หน่วยความจำเพิ่มประมาณ 400MB
อย่าลืมว่า:

การปรับแต่งโค้ดใน Java