{"slug":"thuat-toan-mo-phong-gieo-que-kinh-dich-csprng-markov-chain","title":"Thuật Toán Mô Phỏng Gieo Quẻ Kinh Dịch: CSPRNG, Markov Chain Và Entropy","summary":"Phân tích thuật toán mô phỏng gieo quẻ Kinh Dịch: CSPRNG vs Math.random(), Markov Chain trong phương pháp Cỏ Thi, Binomial Distribution của Ba Đồng Xu, và Deterministic Hashing của Mai Hoa.","excerpt":"Phân tích thuật toán mô phỏng gieo quẻ Kinh Dịch: CSPRNG vs Math.random(), Markov Chain trong phương pháp Cỏ Thi, Binomial Distribution của Ba Đồng Xu, và Deterministic Hashing của Mai Hoa.","markdown":"# Thuật Toán Mô Phỏng Gieo Quẻ Kinh Dịch: CSPRNG, Markov Chain Và Entropy\n### Phân tích dưới góc nhìn Khoa học Máy tính\nBài viết này phân tích chi tiết các thuật toán đằng sau việc mô phỏng gieo quẻ Kinh Dịch trên máy tính — từ nguồn entropy, phân phối xác suất đến mô hình Markov Chain.\n\n## 1. Tại Sao Không Dùng Math.random()?\nMath.random() trong JavaScript sử dụng thuật toán Xorshift128+ — là PRNG (Pseudo-Random Number Generator), có thể đoán trước nếu biết seed. Đối với ứng dụng bói dịch, người dùng kỳ vọng tính ngẫu nhiên thực sự, nên cần CSPRNG.\n\n**Giải pháp: crypto.getRandomValues() (Web Crypto API)**\n// Sinh 1 byte ngẫu nhiên mật mã học\nconst buf = new Uint8Array(1);\ncrypto.getRandomValues(buf);\nconst coinFlip = buf[0] % 2; // 0 hoặc 1\n\n## 2. Mô Phỏng Ba Đồng Xu — Binomial Distribution\nGieo 3 đồng xu, mỗi đồng xu ngửa (3) hoặc sấp (2). Tổng ∈ {6, 7, 8, 9}. Đây là phân phối nhị thức B(3, 0.5) dịch chuyển.\n\nfunction throwThreeCoins() {\nconst bytes = new Uint8Array(3);\ncrypto.getRandomValues(bytes);\nlet sum = 0;\nfor (let i = 0; i < 3; i++) {\nsum += (bytes[i] % 2 === 0) ? 3 : 2; // ngửa=3, sấp=2\n}\nreturn sum; // 6, 7, 8, hoặc 9\n}\n\nPhân phối: P(6)=1/8, P(7)=3/8, P(8)=3/8, P(9)=1/8 — tổng entropy = 1.81 bit/hào.\n\n## 3. Cỏ Thi — Markov Chain Với Trạng Thái Ẩn\nPhương pháp Cỏ Thi (蓍草) gồm 18 bước (3 biến × 6 hào). Mỗi biến (變) tạo dư số phụ thuộc vào kết quả biến trước — đây chính là chuỗi Markov.\n\n**Thuật toán Đại diễn pháp (大衍法):**\nBắt đầu với 49 cọng (bỏ 1 tượng Thái Cực)\nChia 2 nhóm ngẫu nhiên (Lưỡng Nghi — Thiên-Địa)\nRút 1 cọng từ nhóm phải (Tam Tài — Nhân)\nĐếm nhóm trái theo nhóm 4, giữ dư (Tứ Tượng — bốn mùa)\nĐếm nhóm phải theo nhóm 4, giữ dư\nTổng dư = 4 hoặc 8 → \"biến\" (一變)\nLặp 3 biến → 1 hào, 18 biến → 6 hào\n\nEntropy của cỏ thi: ~1.87 bit/hào (thấp hơn đồng xu do phân phối lệch yin-biased).\n\n## 4. Mai Hoa — Deterministic Hashing\nMai Hoa Dịch Số không sử dụng nguồn ngẫu nhiên mà dùng thời gian Can Chi hoặc số nhập vào làm input. Về bản chất, đây là hàm hash deterministic:\n\nupperTrigram = (year + month + day) % 8\nlowerTrigram = (year + month + day + hour) % 8\nmovingLine  = (year + month + day + hour) % 6\n\nCùng thời điểm sẽ luôn cho cùng quẻ — đây là đặc tính, không phải bug. Thiệu Ung tin rằng \"cảm ứng\" (感應) nằm ở thời điểm khởi ý hỏi.\n\n## 5. So Sánh Thuật Toán\nPhương pháp | Kiểu thuật toán | Entropy/hào | Độ phức tạp\nBa đồng xu | Binomial B(3,0.5) | 1.81 bit | O(3) per hào\nCỏ thi | Markov Chain | 1.87 bit | O(18) per hào\nMai Hoa giờ | Deterministic hash | 0 bit | O(1)\nMai Hoa số | Deterministic hash | 0 bit | O(1)\nNhập tay | User input | N/A | O(6)\n\n## Kết luận\nViệc mô phỏng Kinh Dịch trên máy tính đặt ra nhiều bài toán thú vị: từ nguồn entropy mật mã học, mô hình Markov, đến hàm hash deterministic. Mỗi phương pháp cổ đại đều có mô hình toán học tương ứng — chứng tỏ người xưa đã hiểu sâu về xác suất và tổ hợp dù chưa có ngôn ngữ hình thức.","html":"<h3>Phân tích dưới góc nhìn Khoa học Máy tính</h3>\n<p>Bài viết này phân tích chi tiết các thuật toán đằng sau việc mô phỏng gieo quẻ Kinh Dịch trên máy tính — từ nguồn entropy, phân phối xác suất đến mô hình Markov Chain.</p>\n<h2>1. Tại Sao Không Dùng Math.random()?</h2>\n<p>Math.random() trong JavaScript sử dụng thuật toán Xorshift128+ — là PRNG (Pseudo-Random Number Generator), có thể đoán trước nếu biết seed. Đối với ứng dụng bói dịch, người dùng kỳ vọng tính ngẫu nhiên thực sự, nên cần CSPRNG.</p>\n<p><strong>Giải pháp: crypto.getRandomValues() (Web Crypto API)</strong></p>\n<pre><code>// Sinh 1 byte ngẫu nhiên mật mã học\nconst buf = new Uint8Array(1);\ncrypto.getRandomValues(buf);</code></pre>\n<p>const coinFlip = buf[0] % 2; // 0 hoặc 1</p>\n<h2>2. Mô Phỏng Ba Đồng Xu — Binomial Distribution</h2>\n<p>Gieo 3 đồng xu, mỗi đồng xu ngửa (3) hoặc sấp (2). Tổng ∈ {6, 7, 8, 9}. Đây là phân phối nhị thức B(3, 0.5) dịch chuyển.</p>\n<pre><code>function throwThreeCoins() {\n  const bytes = new Uint8Array(3);\n  crypto.getRandomValues(bytes);\n  let sum = 0;\n  for (let i = 0; i &lt; 3; i++) {\n    sum += (bytes[i] % 2 === 0) ? 3 : 2; // ngửa=3, sấp=2\n  }\n  return sum; // 6, 7, 8, hoặc 9</code></pre>\n<p>}</p>\n<p>Phân phối: P(6)=1/8, P(7)=3/8, P(8)=3/8, P(9)=1/8 — tổng entropy = 1.81 bit/hào.</p>\n<h2>3. Cỏ Thi — Markov Chain Với Trạng Thái Ẩn</h2>\n<p>Phương pháp Cỏ Thi (蓍草) gồm 18 bước (3 biến × 6 hào). Mỗi biến (變) tạo dư số phụ thuộc vào kết quả biến trước — đây chính là chuỗi Markov.</p>\n<p><strong>Thuật toán Đại diễn pháp (大衍法):</strong></p>\n<p>Bắt đầu với 49 cọng (bỏ 1 tượng Thái Cực)</p>\n<p>Chia 2 nhóm ngẫu nhiên (Lưỡng Nghi — Thiên-Địa)</p>\n<p>Rút 1 cọng từ nhóm phải (Tam Tài — Nhân)</p>\n<p>Đếm nhóm trái theo nhóm 4, giữ dư (Tứ Tượng — bốn mùa)</p>\n<p>Đếm nhóm phải theo nhóm 4, giữ dư</p>\n<p>Tổng dư = 4 hoặc 8 → &quot;biến&quot; (一變)</p>\n<p>Lặp 3 biến → 1 hào, 18 biến → 6 hào</p>\n<p>Entropy của cỏ thi: ~1.87 bit/hào (thấp hơn đồng xu do phân phối lệch yin-biased).</p>\n<h2>4. Mai Hoa — Deterministic Hashing</h2>\n<p>Mai Hoa Dịch Số không sử dụng nguồn ngẫu nhiên mà dùng thời gian Can Chi hoặc số nhập vào làm input. Về bản chất, đây là hàm hash deterministic:</p>\n<pre><code>upperTrigram = (year + month + day) % 8\nlowerTrigram = (year + month + day + hour) % 8</code></pre>\n<p>movingLine  = (year + month + day + hour) % 6</p>\n<p>Cùng thời điểm sẽ luôn cho cùng quẻ — đây là đặc tính, không phải bug. Thiệu Ung tin rằng &quot;cảm ứng&quot; (感應) nằm ở thời điểm khởi ý hỏi.</p>\n<h2>5. So Sánh Thuật Toán</h2>\n<table class=\"wiki-table\">\n<thead><tr>\n<th>Phương pháp</th>\n<th>Kiểu thuật toán</th>\n<th>Entropy/hào</th>\n<th>Độ phức tạp</th>\n</tr></thead><tbody>\n<tr>\n<td>Ba đồng xu</td>\n<td>Binomial B(3,0.5)</td>\n<td>1.81 bit</td>\n<td>O(3) per hào</td>\n</tr>\n<tr>\n<td>Cỏ thi</td>\n<td>Markov Chain</td>\n<td>1.87 bit</td>\n<td>O(18) per hào</td>\n</tr>\n<tr>\n<td>Mai Hoa giờ</td>\n<td>Deterministic hash</td>\n<td>0 bit</td>\n<td>O(1)</td>\n</tr>\n<tr>\n<td>Mai Hoa số</td>\n<td>Deterministic hash</td>\n<td>0 bit</td>\n<td>O(1)</td>\n</tr>\n<tr>\n<td>Nhập tay</td>\n<td>User input</td>\n<td>N/A</td>\n<td>O(6)</td>\n</tr>\n</tbody></table>\n<h2>Kết luận</h2>\n<p>Việc mô phỏng Kinh Dịch trên máy tính đặt ra nhiều bài toán thú vị: từ nguồn entropy mật mã học, mô hình Markov, đến hàm hash deterministic. Mỗi phương pháp cổ đại đều có mô hình toán học tương ứng — chứng tỏ người xưa đã hiểu sâu về xác suất và tổ hợp dù chưa có ngôn ngữ hình thức.</p>","tags":["Kinh Dịch","Lập trình","Thuật toán"],"author":"System Legacy","publishedAt":"2026-04-04T07:16:27.634Z","updatedAt":"2026-07-17T02:35:25.079Z","published_at":"2026-04-04T07:16:27.634Z","updated_at":"2026-07-17T02:35:25.079Z","view_count":166,"canonical":"https://wiki.quizzman.com/wiki/thuat-toan-mo-phong-gieo-que-kinh-dich-csprng-markov-chain","url":"https://wiki.quizzman.com/wiki/thuat-toan-mo-phong-gieo-que-kinh-dich-csprng-markov-chain","markdownUrl":"https://wiki.quizzman.com/api/articles/thuat-toan-mo-phong-gieo-que-kinh-dich-csprng-markov-chain.md","apiUrl":"https://wiki.quizzman.com/api/articles/thuat-toan-mo-phong-gieo-que-kinh-dich-csprng-markov-chain"}