Trong lập trình không thể tạo ra giá trị ngẫu nhiên (random)

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!

3 Likes

Đừ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ì

  1. Có thể
  2. Không thể
  3. Tôi không biết
1 Like

Đó 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

1 Like

Những cái bạn đang nói người ta đã biết lâu rồi, chả có gì mới cả




1 Like

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)

2 Likes

Đú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

2 Likes

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

1 Like

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.

4 Likes

Quote lại câu hỏi bạn Nấm.

Và phần trả lời của Wiki:

Cuối cùng là bài toán chẳng liên quan đến random

3 Likes

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 à

1 Like

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

Topic closed được rồi!

5 Likes

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

1 Like

:penguin: 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. :penguin:

p/s

Chém gió cho không khí bớt căng thẳng đấy =))

7 Likes

Cái này đúng, ai cũng biết điều này.

Cái này không đúng. Như ảnh png, jpg,… cũng là kiểu mã hóa. Nó so các chuỗi/điểm ảnh giống nhau rồi gộp lại, lúc đọc thì parse ra,…

:sleeping:

2 Likes

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

1 Like

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 :confused:

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ì :confused:

3 Likes

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.

2 Likes

Hi đang tranh luận một thứ không tồn tại đó.

2 Likes

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

1 Like

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

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?