Khi tôi chuyển đổi danh sách Python 3.8.0 thành một tập hợp, thứ tự tập kết quả * có cấu trúc cao theo cách không tầm thường. Làm thế nào cấu trúc này được trích xuất từ danh sách giả ngẫu nhiên?
Là một phần của thử nghiệm tôi đang chạy, tôi đang tạo một bộ ngẫu nhiên. Tôi đã rất ngạc nhiên khi thấy rằng việc vẽ đồ thị đột nhiên cho thấy cấu trúc tuyến tính bất ngờ trong tập hợp. Vì vậy, có hai điều khiến tôi bối rối - tại sao việc chuyển đổi thành kết quả đã đặt lại có thứ tự * kết thúc làm nổi bật cấu trúc này; và, ở mức độ thấp hơn tại sao tập giả ngẫu nhiên lại có cấu trúc "ẩn" này?
Mật mã:
X = [randrange(250) for i in range(30)]
print(X)
print(set(X))
đầu ra nào, ví dụ
[238, 202, 245, 94, 111, 106, 148, 164, 154, 113, 128, 10, 196, 141, 69, 38, 106, 8, 40, 53, 160, 87, 85, 13, 38, 147, 204, 50, 162, 91]
{128, 8, 10, 141, 13, 147, 148, 154, 160, 162, 164, 38, 40, 50, 53, 196, 69, 202, 204, 85, 87, 91, 94, 106, 238, 111, 113, 245}
Một âm mưu ** của danh sách trên trông khá ngẫu nhiên, như mong đợi:
trong khi vẽ sơ đồ tập hợp (vì nó được sắp xếp ở đầu ra) thể hiện cấu trúc có trong tập hợp:
Hành vi này phù hợp 100% trên máy của tôi (nhiều ví dụ bên dưới) với các giá trị 250 và 30 được sử dụng trong đoạn mã trên (ví dụ tôi sử dụng không phải là cherry được chọn - nó chỉ là cái cuối cùng tôi chạy). Điều chỉnh các giá trị này đôi khi dẫn đến cấu trúc hơi khác nhau (ví dụ: tập hợp con của ba tiến trình số học *** thay vì hai).
Đây có phải là tái sản xuất trên máy của người khác? Tất nhiên, cấu trúc như vậy tồn tại dường như chỉ ra một thế hệ số giả ngẫu nhiên không quá lớn, nhưng điều này không giải thích cách chuyển đổi thành một tập hợp theo nghĩa nào đó sẽ "giải nén" cấu trúc này. Theo như tôi biết, không có gì đảm bảo chính thức rằng thứ tự của một tập hợp (khi được chuyển đổi từ danh sách) là xác định (và ngay cả khi nó là, không có thứ tự phức tạp nào được thực hiện trong nền). Vậy chuyện này xảy ra thế nào?!
(*): Tôi biết, các tập hợp là các bộ sưu tập không có thứ tự, nhưng ý tôi là "được đặt hàng" theo nghĩa là, khi gọi printcâu lệnh, tập hợp là đầu ra theo một số thứ nhất quán làm nổi bật cấu trúc bộ bên dưới.
(**): Những mảnh đất này là của Wolfram Alpha. Hai ví dụ nữa dưới đây:
(***): Hai ô khi thay đổi phạm vi của các số ngẫu nhiên từ 250 đến 500:




