Thớt chắc còn ít tuổi và biết viết vài dòng code asm! Nhưng nếu muốn phán câu như thớt thì cần nghiên cứu bản chất của toán học nữa nhé, vì ko nhà toán học nào dùng ASM để nghiên cứu cả!
Trong xác suất có luật số lớn, nghĩa là với 1-100 lần gieo xúc sắc thì kết quả sẽ khác, nhưng với 100000 lần hay nhiều hơn thì kết quả sẽ gần với 50%, nghĩa là tiến tới mức ổn định!
Tuy nhiên, em nên về nghiên cứu kỹ hơn để thấy dc cái hay chỗ này, chứ cứ duy ý chí như em thì ko ai muốn bàn nữa đâu, vì nói nữa em cũng ko hiểu đâu!
Đừng nghĩ bạn thông minh hơn người khác
Mình đang nói về việc dùng máy tính thì không thể tạo ra giá trị random
Mà bản chất là đưa cho nó ngay 1 giá trị random làm tham số
Mình nói ngắn gọn thế này
Tỷ lệ trúng sổ số là 1 phần triệu đi
Vậy tỷ lệ 1 người trúng xổ số đó trong 1 triệu ngày liên tiếp là bao nhiêu?
Câu trả lời của bạn là gì
Đó là trong lập trình
Còn trong toán học thì mình không học toán cao cấp
Nhưng chẳng có 1 phép toán nào trả về 1 giá trị ngẫu nhiên cả
Với các con số và biểu thức thì đằng sau dấu = luôn là 1 giá trị cố định
Bạn giỏi vậy thử viết cho mình 1 hàm lập trình mà không lấy bất cứ giá trị nào ở ngoài
Hay 1 phép toán cho ra 1 giá trị random xem
Vậy chủ thớt nghĩ sao về công thức tính số ngẫu nhiên của mình (số từ 0 đến 9)
Số ngẫu nhiên = Pi [Giờ * phút * giây]
(Pi là mảng chữ số thập phân của Pi)
Đúng vậy, ngay cả con người, với một bộ não cao cấp hơn AI rất nhiều, vẫn không thể nào đưa ra một dãy số hoàn toàn ngẫu nhiên. Với một AI đủ mạnh, dựa trên những nước đi trước đó, nó có thể dự đoán được con người sẽ đưa ra số nào tiếp theo. Thế nên, ngẫu nhiên tuyệt đối càng không tồn tại trong máy tính.
Tuy nhiên, nếu như một hàm có input là không thể kiểm soát được, và không có mối quan hệ giữa các output với nhau, ta có thể sử dụng nó như một hàm ngẫu nhiên chấp nhận được, và sử dụng nó trong các ứng dụng thực tế trong khi sai sót đó chấp nhận được
Không thể và không thể tạo giá trị ngẫu nhiên
Bài toán đơn giản thôi
Chọn 1 số ngẫu nhiên từ 0 đến vô cùng
Ở đây vô cùng là rất lớn. … vô cùng số 0 đằng sau
Suy ra giá trị ngẫu nhiên tạo ra cũng có vô cùng số
=> Đố máy tính tạo nổi
Các bác đọc lý thuyết mà không hiểu thì chịu
Bạn có thể thấy mọi người đều đồng ý rằng không thể tạo một hàm random tuyệt đối.
Nhưng mọi người đều đưa các ví dụ về hàm random trong ứng dụng thực tế.
Sự tồn tại của những thứ tương đối là cần thiết, cũng như khi có kiểu long người ta vẫn dùng kiểu int. Những thứ tuyệt đối chỉ tồn tại trong lý thuyết, và đôi khi không tồn tại.
Nói đơn giản thế này
Với mỗi đối tượng sinh ra đặt cho nó 1 cái tên ( ID )
Khi đặt tên cho đối tượng n thì không được xem lại danh sách tên (n - 1) các đối tượng trước đó
Các ID không được trùng nhau
=> Để tỷ lệ va chạm là 1 / tỷ
Thì 1 tỷ đối tượng ta phải random từ 0 đến 1 tỷ tỷ
Với 1 tỷ đối tượng sinh ra ban đầu
Giây thứ 2 mỗi đối tượng sinh ra 2 đối tượng con
Theo cấp số nhân như vậy thì hàm random nào đủ sức đánh ID ngẫu nhiên không trùng cho mỗi đối tượng
=> Không phải là random từ 0 đến vô cùng à
Thôi em ơi, em càng nói thì càng chứng tỏ mình ko hiểu gì cả! Để anh giải đáp cái cuối em nói về phần đánh số cho em nhé : sử dụng Hashing, vd MurmurHash: https://en.wikipedia.org/wiki/MurmurHash
Không hiểu ai mới là người không hiểu ở đây
Cái link về thuật toán đó còn dễ tìm va chạm hơn là các thuật toán mã hóa đang được sử dụng
Nói đơn giản như MD5
Trong MD5 tồn tại việc 2 chuỗi có cùng 1 MD5 hash
Chưa kể các thuật toán mã hóa hiện đại cũng tương tự
Vì ta không thể dùng 1 chuỗi có độ dài 32 hay 64
Để đánh id cho tất cả các chuỗi còn lại được
Còn chưa thèm nói là tỷ lệ va chạm. Hay số chuỗi có cùng hash còn lớn hơn số sao trên trời
Như kiểu dùng 256 bit để đánh id cho 1 GB dữ liệu ấy
=> Số chuỗi đầu vào có cùng hash là vô cùng
Tạo random ư?
Cho 8 qubit ở trạng thái superposition. Vì trạng thái superposition, ta sẽ không biết nó là 1 hay 0 cho tới khi kiểm tra trạng thái của qubit đó (Quantum magic!). Khi nào cần sinh random number chỉ cần kiểm tra xem qubit nó ntn. Khi kiểm tra thì trạng thái superposition sẽ biết mất, để lại các bit 1 và 0. Và từ đó ta sẽ có 8 bit hoàn toàn ngẫu nhiên.
Trước đây không hiểu lắm thì mình có hỏi xem cách làm 1 hàm random nhưng không ai trả lời
@Dark.Hade
Tất cả khối dữ liệu đầu vào dạng byte araray
Việc thay đổi 1 bit cũng thay đổi kết quả trả về
Có thể làm giả MD5 của 1 File nếu biết cách thay đổi vài byte cần thiết
=> 2 File khác nhau hoàn toàn sẽ có cùng check sum
Mình không hiểu bạn đem mấy cái hash function ra làm gì nhỉ, nó có liên quan gì đến randomness ?
Ta có thể nói số Pi là ngẫu nhiên
Số PI không phải ngẫu nhiên.
Suy ra giá trị ngẫu nhiên tạo ra cũng có vô cùng số
=> Đố máy tính tạo nổi
2 bài toán này khác nhau nhé:
Máy tính không thể biểu diễn tất cả mọi số trên đời => Đúng
Nguồn random không cần phải tạo ra mọi số, chỉ cần tạo ra 1 cặp số là đủ rồi.
Nhưng chẳng có 1 phép toán nào trả về 1 giá trị ngẫu nhiên cả
Google Radioactive decay bạn nhé, trên đời có vô số hiện tượng xảy ra đúng nghĩa ngẫu nhiên (thường các hiện tượng này đều liên quan đến lượng tử)
Số chuỗi đầu vào có cùng hash là vô cùng
pigeonhole principle, map m item vào n lồng (m>n) thì chắc chắn phải có 1 lồng chứa hơn 1 item, và mình vẫn chưa hiểu nó mâu thuẫn gì với tạo số random. Hình như bạn đang nhầm lẫn giữa hashing và randomness thì phải
Còn chưa thèm nói là tỷ lệ va chạm. Hay số chuỗi có cùng hash còn lớn hơn số sao trên trời
Như kiểu dùng 256 bit để đánh id cho 1 GB dữ liệu ấy
=> Số chuỗi đầu vào có cùng hash là vô cùng
Có thể làm giả MD5 của 1 File nếu biết cách thay đổi vài byte cần thiết
=> 2 File khác nhau hoàn toàn sẽ có cùng check sum
=> Những thứ bạn nói nãy h ai cũng biết, đọc nguyên topic nãy h mình thật sự không hiểu bạn đang muốn tranh luận về cái gì
Không phải không có cách nào tạo ra ngẫu nhiên thực sự mà là ngẫu nhiên thực sự nó không tồn tại. Nhiệm vụ tạo giá trị ngẫu nhiên tạo ra một giá trị khó đoán tuỳ theo mức độ yêu cầu của ứng dụng.
Ban đầu mình chỉ nói là không tạo được thôi
Tại mấy người sau thêm vào như kiểu có 1 thuật toán ngẫu nhiên thật ấy
Nó không phải là không tồn tại trong cuộc sống
Lấy ví dụ như Bitcoin
1 khóa riêng ( private key ). Có thể tạo ra nhiều ví ( wallet )
Khi ta tìm được 2 khóa riêng khác nhau có cùng 1 địa chỉ
=> Giả sử ví đó là xxx
Ta chuyển 1 đồng bitcoin vào địa chỉ xxx đó
Sau đó thực hiện lệnh chuyển từ xxx đến xxx 1 Bitcoin ( Do có 2 khóa privatekey tạo giao dịch nên giao dịch này vẫn được hệ thống chấp nhận )
=> Ta đã thực hiện thành công việc nhân 2 Bitcoin sau mỗi giao dịch
Sr. Nhầm
Không thể dùng các đó để tăng bitcoin được
Nói chung đồng bitcoin còn nhiều vấn đề mà vấn đề lớn nhất là tính xác xuất
Ban đầu nghe bitcoin thì mơ hồ
Sau google nhiều cũng hiểu cách hoạt động