Tôi có một thuật toán đếm mà tôi đang cố gắng để có được một mô tả lớn-o chung. Nó là khủng khiếp lồng nhau và khủng khiếp theo cấp số nhân. Ở đây là:Đơn giản hóa độ phức tạp Big-O của thuật toán số mũ này
1. For each T_i in T
2. For k = 1 to max_k
3. For each of 2^k*(n choose k) items
4. For each t in T_i
5. check if the item is in t...etc.
Dưới đây là một ý tưởng line-by-line của mỗi lần chạy
- Đây là một phân vùng đơn giản và tôi sẽ chỉ cho nó một c1 liên tục.
- max_k là một số nhỏ, luôn nhỏ hơn n, có lẽ khoảng 4 hoặc 5. Tôi sẽ sử dụng k bên dưới.
- Vòng lặp này luôn chạy 2^k * (n chọn k) lần
- Bằng cách xem xét dòng 1, chúng ta có thể khái quát hóa dòng này và biết nó sẽ không bao giờ cháy nhiều hơn 2^n lần trong trường hợp xấu nhất, nhưng nói chung sẽ chạy một phần của 2^n lần, vì vậy chúng tôi sẽ gọi một (2^n)/c2
- Đây là thao tác if-statement đơn giản bên trong tất cả các vòng lặp, vì vậy c3.
Nhân tất cả này lại với nhau cho:
c1 * k * 2^k * (n choose k) * (2^n)/c2 * c3
Vì tôi muốn có một lớn-O đại diện, bỏ qua các hằng số cho:
k * 2^k * (n choose k) * (2^n)
Được biết (n chọn k) giáp ở trên bởi (n * e/k)^k, như vậy:
O(k * 2^k * (n * e/k)^k * (2^n))
Nhiệm vụ của tôi trên là, những gì tôi có thể bỏ qua ở đây ... 2^n chắc chắn là thuật ngữ thống trị vì n luôn luôn lớn hơn k, và thường nhiều hơn như vậy. Điều này có thể được đơn giản hóa thành O (2^n) không? Hoặc O (2^khủng khiếp)? Hoặc tôi nên để trong 2^k, như trong O (2^k * 2^n)? (hoặc để lại tất cả các điều khoản trong?)
Sự hiểu biết của tôi là nếu k hoặc max_k có thể cạnh tranh hoặc vượt qua n, thì chúng rất quan trọng. Nhưng vì chúng luôn bị chi phối, chúng có thể bị loại bỏ như các điều kiện bậc thấp hơn của thời gian chạy đa thức? Tôi cho rằng tất cả các mớ hỗn độn thời gian chạy theo cấp số nhân đều gây nhầm lẫn cho tôi. Bất cứ lời khuyên nào cũng đươc đánh giá cao.
+1 Câu trả lời đúng ... – MoonKnight
Nếu đúng là n luôn lớn hơn k, có đủ cho giới hạn k và do đó loại bỏ nó không? Tôi nghĩ đó là những gì bạn đang nói nhưng tôi muốn chắc chắn. Ví dụ n * lg (k) của bạn khá rõ ràng - cảm ơn bạn vì điều đó. –
@Chucktown: 'Nếu đúng là n luôn luôn lớn hơn k, thì có đủ cho giới hạn k và do đó loại bỏ nó không?' Không. Khi chúng ta nói 'k bị ràng buộc', ta có nghĩa là có * CONSTANT *' c' sao cho 'k
amit