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 à
Trong lập trình không thể tạo ra giá trị ngẫu nhiên (random)
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!
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.
p/s
Chém gió cho không khí bớt căng thẳng đấy =))
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,…
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.
Hi đang tranh luận một thứ không tồn tại đó.
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
Hi Hải Duy Nguyễn.
- Có lẽ là do cách bạn phản biện nên dẫn đến mọi người lạc đề và không nói vào chủ đề chính.
VD bitcoin và sinh số ngẫu nhiên trong lập trình không liên qua gì đến nhau cả. - Về sinh số ngẫu nhiên đúng là thuật toán không thể tạo ra nếu không có hạt giống ngẫu nhiên ban đầu. Tuy nhiên một thực tế là phần mềm và phần cứng luôn đi kèm với nhau nên các yêu tố như thời gian hay các phần cứng ngẫu nhiên đặc biệt hoàn toàn được chấp nhận là một phần của hệ thống sinh số ngẫu nhiên. Giống như việc không có màn hình thì không có lập trình đồ họa vậy.
P/S Nếu bạn thích tranh luận thì cũng nên học về kỹ thuật hùng biện và phản biện trước.
Sr. Cũng chỉ vì tò mò
Thêm nữa là nhận ra hình như không có cách nào đảo ngược mã hóa ( không chắc lắm )
Lấy ví dụ thuật toán mã hóa bất đối xứng khi mà chìa khóa và giải mã không giống nhau
Ví dụ khi dữ liệu truyền qua proxy
byte[data] => hash(byte[data],publickey) { proxy can read } => unhash(byte[data],privatekey) == byte[data]
Như vậy thì proxy không cách nào giải mã được dữ liệu mã hóa dù biết chìa khóa đóng gói dữ liệu
Tất nhiên thì burte force hay ddos không bao giờ là lỗi thời
Cộng thêm sức mạnh của máy tính và có cái gì đó gọi là máy turing
Suy cho cùng thì độ dài của chìa khóa quyết định sự bảo mật
Nhưng khi tăng độ dài của chìa khóa thì cũng không loại trừ khả năng bị giải bởi 1 máy tính 128 bit hay n bit
theo wiki thì Ngẫu nhiên nghĩa là thiếu một khuôn mẫu hay khả năng dự báo trong các sự kiện.[1] Sự ngẫu nhiên cho thấy một sự vô thứ tự hoặc không gắn kết trong một chuỗi các ký hiệu hoặc bước, nấc; sao cho không có một khuôn mẫu hoặc sự kết hợp nào minh bạch dễ hiểu. vậy những cái xuất hiện không theo quy luật được gọi là ngẫu nhiên , có những cái mà thời điểm này ngày hôm nay nó ra 1 giá trị , nhưng ngày mai cũng thời điểm này nó ra 1 giá trị khác , đó là ngẫu nhiên , thiếu quái gì hàm có thể làm được như thế =))
Chủ đề này đang bàn về sự cực đoan/ triết học/ thuyết tuyệt đối vậy chủ topic? Tất nhiên là không cần phải có cái ngẫu nhiên đến tuyệt đối, vấn đề có giá trị khó đoán đủ để áp dụng vào các giải thuật mã hóa khiến cho phần lớn những kẻ trộm bó tay khi muốn mở mật khẩu, còn với những kẻ mà trong đầu hắn nảy sinh ra được giá trị ngẫu nhiên trùng với mật khẩu thì… khỏi bàn :D, cái sự ngẫu nhiên của ý tưởng viết chủ đề này cũng đủ để ngẫu nhiên rồi đó, nó gây tốn băng thông cho daynhauhoc.com chỉ để thỏa mãn cái ngẫu nhiên của chủ topic.
Những chủ đề như này đào sâu vào thì có rất nhiều thứ để tranh luận, cơ mà thiếu kiến thức cơ bản như ông thread rồi đem lên đây tranh luận thì đúng là tốn bw diễn đàn thật
Có bài này của bác asm bên gamevn cũng khá hay: http://forum.gamevn.com/threads/so-ngau-nhien.1315533/
Nói về sinh ngẫu nhiên trong game xưa thì Pokemon là điển hình: max EV max chỉ số là nhờ nắm được cái thóp này, chủ yếu dùng input thay vì dùng inner state riêng. https://www.reddit.com/r/pokemonrng/
Còn thớt muốn random ntn? (hay ứng dụng vào việc gì? quay thưởng? mô phỏng? mã hóa? có yêu cầu riêng). “Ngẫu nhiên” theo thường ngữ là một khái niệm rất mơ hồ và mâu thuẫn.
int getRandomNumber() {
return 4;
}
Đang có suy nghĩ rằng “Ko biết các hàm random trong các ngôn ngữ lập trình có thực sự tạo ra số random ko?” thì mình “ngẫu nhiên” gặp được bài này.
Ko biết có phải “ngẫu nhiên” ko nữa?