Tối ưu hóa mã trong Java
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
Ký hiệu toán học mô tả kịch bản xấu nhất.
Một số lớp độ phức tạp phổ biến:
O(1): Thời gian hằng - không phụ thuộc kích thướcO(1) là get() của ArrayListCài đặt nội bộ (đơn giản) cho ArrayList chứa String:
public class ArrayList {}
private String[] data; // Internal array
private int size;
// Get operation - direct array access
public String get(int index) {
return data[index]; // O(1)
}
}
Ký hiệu toán học mô tả kịch bản xấu nhất
Một số lớp độ phức tạp phổ biến:
O(1): Thời gian hằng - không phụ thuộc kích thướcO(n): Thời gian tuyến tính - tăng theo kích thước đầu vàocontains() của ArrayListpublic boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
// Linear search through array
for (int i = 0; i < size; i++) {
if (o.equals(elementData[i])) {
return i;
}
}
return -1; // Not found
}
Ký hiệu toán học mô tả kịch bản xấu nhất
Một số lớp độ phức tạp phổ biến:
O(1): Thời gian hằng - không phụ thuộc kích thướcO(n): Thời gian tuyến tính - tăng theo kích thước đầu vàoO(n²): Thời gian bậc hai - tăng theo bình phương kích thước// Finding a pair of numbers that sum to a target value
// Time complexity: O(n²)
public int[] findPairWithSum(ArrayList<Integer> numbers, int targetSum) {
for (int i = 0; i < numbers.size(); i++) {
for (int j = i + 1; j < numbers.size(); j++) {
if (numbers.get(i) + numbers.get(j) == targetSum) {
console.log("Found them!")
}
}
}
}
Ảnh hưởng của kích thước đầu vào:
O(1): 1.000 -> 1.000.000 mục = Thời gian như nhau!O(n): 1.000 -> 1.000.000 mục = Chậm hơn 1.000×O(n²): 1.000 -> 1.000.000 mục = Chậm hơn 1.000.000×
Tối ưu hóa mã trong Java