Tôi cần trình bày một bộ và tôi bắt đầu làm việc với Data.Set. Tôi thấy rằng không có gì để làm thực sự - singleton
, union
, intersection
, vv là tất cả chỉ có. Tôi thích nó. Tôi có thể diễn tả "cái gì", không phải "làm sao". Nhưng lập trình viên bên trong C của tôi là không thoải mái. Có rất nhiều cách để thực hiện một tập hợp (cây nhị phân, băm, mảng boolean, vv) Tôi có thể thực sự tin tưởng Data.Set để chọn tốt nhất? Tôi có thể hướng dẫn nó theo một cách nào đó hay tôi chỉ đầu hàng trước phán quyết của mình (tôi thừa nhận, có lẽ cao hơn)?Data.Set: nó luôn luôn biết tốt nhất?
Trả lời
Data.Set
không có thông tin tình báo bên trong (chỉ cần xem the source!). Nó chỉ là một cây cân bằng hoặc các yếu tố được sắp xếp. Bạn có thể xem xung quanh về hackage cho nhiều cấu trúc khác và thiết lập giống như với các đặc tính hiệu suất khác nhau. Ví dụ: xem unordered-containers (HashSet), HashTables và bloomfilter.
OK, cảm ơn. Tôi đoán một câu hỏi tiếp theo là - có, hoặc sẽ có, một 'Data.Set' có thể được tin cậy để thực hiện một số các lựa chọn thực hiện cho người gọi? tức là khi được thông báo rằng tên miền chỉ là [1..8], nó sẽ chỉ ra rằng nó chỉ có thể sử dụng một byte? – gcbenison
Xem tất cả các giá trị được đóng hộp, bạn sẽ không thể sử dụng nó chỉ bằng một byte. Làm thế nào bạn sẽ thực hiện điều đó trong Haskell? Tôi đoán bạn sẽ kiểm tra giá trị của đầu vào và thiết lập bit trong 'Word8' của bạn bằng tay sau đó phải phân bổ một giá trị đóng hộp cho mỗi tra cứu? Không giống như một màn trình diễn giành chiến thắng với tôi. –
Có vẻ như bạn vẫn có thể thực hiện các so sánh bình đẳng mà không có bất kỳ phân bổ nào, và có lẽ là các công đoàn và các giao lộ chỉ với một phân bổ của một Word8. – gcbenison
Tổng quát Data.Set
sử dụng cây nhị phân cân bằng. Nếu bạn có bộ số nguyên hoặc bit vectơ, bạn sẽ muốn Data.IntSet
, sử dụng thử Patricia.
Cả hai triển khai đã được mài giũa qua năm cạnh tranh để có được hiệu suất tốt nhất có thể với Haskell.
Đầu hàng Dorothy!
Điều này kết hợp với câu trả lời của Thomas cùng nhau tạo thành một câu trả lời tốt. 'Data.Set' rất tuyệt, có giao diện tuyệt vời và đủ nhanh trong hầu hết các trường hợp (tốt hơn nhiều so với những gì chúng ta có thể cuộn bằng tay), nhưng (giống như mọi thứ) nó sẽ không giải quyết mọi vấn đề một cách tối ưu. Đừng lo lắng về nó cho đến khi bạn cần; khi bạn làm, hãy xem một số thư viện khác. – luqui
@luqui Tôi nghĩ rằng khi bạn có bộ số nguyên, nó đáng đi thẳng đến 'Data.IntSet'. –
- 1. Chính xác va_end là gì? Nó luôn luôn cần thiết để gọi nó?
- 2. Application.OpenForms.Count = 0 luôn luôn
- 3. jQuery từng luôn phân loại nó?
- 4. Là sizeof (enum) == sizeof (int), luôn luôn?
- 5. carrierwave content_type luôn luôn nil
- 6. ExecuteNonQuery() trả về -1 luôn luôn
- 7. LUÔN LUÔN trên cửa sổ trên cùng
- 8. Có phải $ _SERVER ['REMOTE_ADDR'] luôn luôn đặt()?
- 9. "Đối với tiền, luôn luôn thập phân"?
- 10. là XmlFormat() luôn tốt hơn htmlEditFormat()?
- 11. FileUpload.PostedFile luôn luôn rỗng bên trong UpdatePanel
- 12. SQLite đọc luôn luôn đánh đĩa?
- 13. TTS đầu ra luôn luôn A2DP
- 14. BÀI ĐĂNG BÀI HÁT luôn luôn trống
- 15. Rails flash [: notice] luôn luôn nil
- 16. C++ phong cách mã hóa tốt - luôn luôn có đủ loại thư viện đủ điều kiện?
- 17. java.sql.Timestamp được tạo từ java.util.Date, tại sao luôn luôn trước() nó?
- 18. textview.getLineCount luôn luôn 0 trong android
- 19. khoảng thời gian luôn luôn tích cực
- 20. prepareForSegue ** luôn luôn ** tạo một newViewViewController mới?
- 21. Thực tiễn tốt là luôn luôn xác định `value_type` khi chúng tôi xác định mẫu
- 22. Ổ cắm trên web Chrome, luôn luôn đọc trên 0
- 23. Haskell có luôn biết 'quay lại' nào để gọi?
- 24. MongoDB $ tồn tại luôn luôn trở về 0
- 25. có khoá ngoại luôn luôn tham chiếu đến khóa duy nhất trong bảng khác không?
- 26. document.readyState == "complete" luôn là false. Nhà nước luôn luôn là "tương tác"
- 27. Cách đặt 'luôn luôn-dưới-dưới'-cửa sổ
- 28. Fgets() luôn luôn chấm dứt bộ đệm char với \ 0?
- 29. VB6 ADODB.Recordset RecordCount tài sản luôn luôn trả về -1
- 30. Chú thích Spring @Value luôn luôn đánh giá là rỗng?
Đi với tùy chọn 2, đặc biệt nếu điều này là để sử dụng trong mã sản xuất. – Shredderroy