Hãy nói rằng chúng tôi có những điều sau Haskell:Haskell GHC: độ phức tạp về thời gian của một mẫu khớp với N constructors là bao nhiêu?
data T = T0 | T1 | T2 | ... | TN
toInt :: T -> Int
toInt t = case t of
T0 -> 0
T1 -> 1
T2 -> 2
...
TN -> N
thuật toán nào được sử dụng để thực hiện các mô hình phù hợp đây? Tôi thấy hai lựa chọn:
(1) Tìm kiếm tuyến tính, một cái gì đó giống như
if (t.tag == T0) { ... }
else if (t.tag == T1) { ... }
else ...
(2) tìm kiếm nhị phân, đó sẽ là hợp lý trong nhiệm vụ cụ thể sau: tìm kiếm t.tag
trong tập {TO
... T1023
}. Tuy nhiên, nơi khớp mẫu nói chung có nhiều khả năng và khái quát khác, điều này có thể không được sử dụng.
Biên dịch bằng GHC, thuật toán nào được sử dụng và độ phức tạp về thời gian theo N là gì, để khớp mẫu trên t
trong toInt
?
Câu hỏi này nhắc tôi về [Ví dụ 'Eq' tự động lấy từ GHC thực sự * O (N) *?] (Http://stackoverflow.com/questions/6212387) – hvr