Dữ liệu phi bệnh lý của người Viking có nghĩa là gì?


14

Tôi đã tham gia một lớp học thuật toán trên Coursera. Giáo sư trong video về bảng băm nói rằng

Điều đúng là đối với dữ liệu phi bệnh lý, bạn sẽ có được các hoạt động thời gian liên tục trong một bảng băm được triển khai đúng cách.

"Dữ liệu phi bệnh lý" nghĩa là gì? Bạn có thể cho một số ví dụ?

Câu trả lời:


15

Dữ liệu bệnh lý được cho là dữ liệu khiến mọi thứ đi sai theo một cách nào đó cho tính toán dự định của bạn. Nó có thể được gọi là bệnh lý khi nó đủ hiếm trong sử dụng thực tế, do đó mọi thứ hoạt động tốt hầu hết thời gian. Điều này đôi khi có thể được thực hiện chính xác hơn về mặt toán học (ví dụ với xác suất), nhưng việc sử dụng từ bệnh lý thường không chính thức.

Ví dụ, salad cà chua và sốt cà chua là thực phẩm tuyệt vời, ngoại trừ những người bệnh lý, nghĩa là những người bị dị ứng với cà chua. Nó thực sự có thể giết trong một số trường hợp. Nhưng những người dị ứng với cà chua là rất hiếm vì vậy các món cà chua được coi là tuyệt vời, ngoại trừ trong các trường hợp bệnh lý.

Có nhiều thuật toán, trong khi có độ phức tạp trường hợp xấu nhất trên mức tối ưu, thì trung bình là tốt hoặc tốt hơn thuật toán tối ưu trường hợp xấu nhất. Nếu bạn so sánh quicksort và merge sort , quicksort là thời gian trong khi sort sort là O ( n lg n ) trong trường hợp xấu nhất. Nhưng mọi người thường sẽ sử dụng quicksort, vì cả hai đều có thời gian O ( n lg n ) trung bình và độ phức tạp không gian là O ( lg n ) cho quicksort và O ( n )Ôi(n2)Ôi(nlgn)Ôi(nlgn)Ôi(lgn)Ôi(n) để sắp xếp hợp nhất.

Ôi(n2)


1
Bên cạnh các loại, điều quan trọng là sự hợp nhất là ổn định trong khi quicksort thì không.
wchargein

11

Dữ liệu bệnh lý là dữ liệu sẽ làm cho thuật toán thực hiện xấu. Đối với bảng băm, dữ liệu bệnh lý là dữ liệu gây ra va chạm. Điều đó tất nhiên phụ thuộc vào hàm băm đang được sử dụng.

Ví dụ: nếu hàm băm của bạn thêm các ký tự lại với nhau : hash("abcd") = 'a' + 'b' + 'c' + 'd'. Sau đó, dữ liệu bệnh lý trông như:

{"abcd", "dcba", "cbda", ...}. Bất kỳ hoán vị nào "abcd"sẽ băm vào cùng một vị trí, do đó bạn sẽ kết thúc với một danh sách được liên kết mà bạn đang cố gắng tránh ở vị trí đầu tiên.

Dữ liệu phi bệnh lý là dữ liệu không phải là bệnh lý.


-1

một cách khác để suy nghĩ về điều này: các khóa băm giống như các "thùng" riêng biệt chứa dữ liệu. người ta sẽ mong đợi / hy vọng rằng dữ liệu được phân bổ đều giữa tất cả các thùng, "cân bằng". đối với dữ liệu không thông cảm, mỗi thùng có / chứa cùng một lượng dữ liệu. nếu dữ liệu là bệnh lý (thuật toán băm khóa wrt), tất cả sẽ "chồng chất" trong ít thùng hơn và một số thùng có ít hơn nhiều. điều này là không hiệu quả vì thời gian tra cứu tăng (và hiệu quả giảm / hội tụ với việc tra cứu danh sách chưa sắp xếp) khi các thùng được đổ đầy lớn hơn. lưu ý rằng chỉ cần thay đổi thuật toán băm khóa có thể biến dữ liệu từ "bệnh lý" thành "không bệnh lý" hoặc ngược lại, do đó tầm quan trọng của thuật toán băm.

ngoài ra còn có nhiều thuật toán khác để phân biệt "bệnh lý và không đồng cảm", với cơ bản là dữ liệu "bệnh lý" làm cho thuật toán thực hiện trong trường hợp xấu hơn (ví dụ: khái niệm này cũng được sử dụng với các thuật toán sắp xếp). như bạn có thể thấy nó là một khái niệm thống kê. cũng với cùng một vấn đề, dữ liệu "bệnh lý" cho một thuật toán có thể không phải là "bệnh lý" cho một thuật toán khác. Vân vân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.