O (log * N) là gì và nó khác O (log N) như thế nào?
O (log * N) là gì và nó khác O (log N) như thế nào?
Câu trả lời:
O( log* N )
là " logarit lặp lại ":
Trong khoa học máy tính, logarit lặp lại của n, được viết là log * n (thường được đọc là "log sao"), là số lần hàm logarit phải được áp dụng lặp đi lặp lại trước khi kết quả nhỏ hơn hoặc bằng 1.
O( N log* N )
trước khi nó được cải tiến thành O( A N )
, trong đó A là hàm Ackermann nghịch đảo. Tôi vẫn không hiểu bằng chứng thứ hai, nhưng O( N log* N )
thuật toán tương đối tốt.
Các log* N
bit là một thuật toán lặp mà phát triển rất chậm, chậm hơn nhiều so với chỉ log N
. Về cơ bản, bạn chỉ cần lặp đi lặp lại 'ghi nhật ký' câu trả lời cho đến khi nó thấp hơn một (Ví dụ log(log(log(...log(N)))
:), và số lần bạn phải log()
là câu trả lời.
Dù sao, đây là một câu hỏi đã 5 năm tuổi trên Stackoverflow, nhưng không có mã nào? (!) Hãy khắc phục điều đó - đây là cách triển khai cho cả hàm đệ quy và lặp (cả hai đều cho cùng một kết quả):
public double iteratedLogRecursive(double n, double b)
{
if (n > 1.0) {
return 1.0 + iteratedLogRecursive( Math.Log(n, b),b );
}
else return 0;
}
public int iteratedLogIterative(double n, double b)
{
int count=0;
while (n >= 1) {
n = Math.Log(n,b);
count++;
}
return count;
}
log * (n) - "log Star n" còn được gọi là "logarit lặp lại"
Nói một cách dễ hiểu, bạn có thể giả sử log * (n) = log (log (log (..... (log * (n))))
log * (n) rất mạnh mẽ.
Thí dụ:
1) Nhật ký * (n) = 5 trong đó n = Số nguyên tử trong vũ trụ
2) Tô màu cây bằng cách sử dụng 3 màu có thể được thực hiện trong log * (n) trong khi tô màu Cây 2 màu là đủ nhưng độ phức tạp sẽ là O (n) sau đó.
3) Tìm tam giác Delaunay của một tập hợp các điểm biết cây khung cực tiểu Euclide: thời gian O (n log * n) ngẫu nhiên.
O(log* N)
Rất tiếc, không có câu trả lời .