Toan-Roi-Rac-87M / src /generate_massive_data.py
Minhtan210905's picture
Upload folder using huggingface_hub
2aee49a verified
Raw History Blame Contribute Delete
32.9 kB
"""
Script sinh dữ liệu Toán Rời Rạc chất lượng cao.
Chạy: python src/generate_massive_data.py
Kết quả: Nối thêm data vào data/raw/output.csv
"""
import csv
import os
import sys
sys.stdout.reconfigure(encoding='utf-8')
OUTPUT_CSV = 'data/raw/output.csv'
# ============================================================
# NGÂN HÀNG DỮ LIỆU TOÁN RỜI RẠC
# Mỗi entry: (topic, question, answer)
# Bao gồm nhiều cách diễn đạt khác nhau cho cùng 1 ý nghĩa
# ============================================================
EXTRA_DATA = [
# ====================== LOGIC MỆNH ĐỀ ======================
("Logic mệnh đề", "Luật lũy đẳng là gì?",
"Luật lũy đẳng phát biểu rằng p ∧ p tương đương p, và p ∨ p cũng tương đương p. Nghĩa là phép hội hoặc phép tuyển một mệnh đề với chính nó cho kết quả chính là mệnh đề đó."),
("Logic mệnh đề", "Giải thích luật lũy đẳng trong logic mệnh đề.",
"Luật lũy đẳng phát biểu rằng p ∧ p tương đương p, và p ∨ p cũng tương đương p. Nghĩa là phép hội hoặc phép tuyển một mệnh đề với chính nó cho kết quả chính là mệnh đề đó."),
("Logic mệnh đề", "Trình bày luật lũy đẳng.",
"Luật lũy đẳng phát biểu rằng p ∧ p tương đương p, và p ∨ p cũng tương đương p. Nghĩa là phép hội hoặc phép tuyển một mệnh đề với chính nó cho kết quả chính là mệnh đề đó."),
("Logic mệnh đề", "Luật De Morgan là gì?",
"Luật De Morgan gồm hai quy tắc: phủ định của phép hội bằng phép tuyển các phủ định ¬(p ∧ q) ≡ ¬p ∨ ¬q, và phủ định của phép tuyển bằng phép hội các phủ định ¬(p ∨ q) ≡ ¬p ∧ ¬q."),
("Logic mệnh đề", "Hãy giải thích luật De Morgan cho tui.",
"Luật De Morgan gồm hai quy tắc: phủ định của phép hội bằng phép tuyển các phủ định ¬(p ∧ q) ≡ ¬p ∨ ¬q, và phủ định của phép tuyển bằng phép hội các phủ định ¬(p ∨ q) ≡ ¬p ∧ ¬q."),
("Logic mệnh đề", "Phát biểu luật De Morgan trong toán rời rạc.",
"Luật De Morgan gồm hai quy tắc: phủ định của phép hội bằng phép tuyển các phủ định ¬(p ∧ q) ≡ ¬p ∨ ¬q, và phủ định của phép tuyển bằng phép hội các phủ định ¬(p ∨ q) ≡ ¬p ∧ ¬q."),
("Logic mệnh đề", "Modus Ponens là gì?",
"Modus Ponens là quy tắc suy luận: Nếu p → q đúng và p đúng, thì kết luận q đúng. Đây là một trong những quy tắc suy luận cơ bản nhất trong logic hình thức."),
("Logic mệnh đề", "Giải thích quy tắc Modus Ponens.",
"Modus Ponens là quy tắc suy luận: Nếu p → q đúng và p đúng, thì kết luận q đúng. Đây là một trong những quy tắc suy luận cơ bản nhất trong logic hình thức."),
("Logic mệnh đề", "Modus Tollens là gì?",
"Modus Tollens là quy tắc suy luận: Nếu p → q đúng và q sai (¬q), thì kết luận p sai (¬p). Nó là dạng phủ nhận hệ quả để phủ nhận giả thiết."),
("Logic mệnh đề", "Trình bày quy tắc Modus Tollens.",
"Modus Tollens là quy tắc suy luận: Nếu p → q đúng và q sai (¬q), thì kết luận p sai (¬p). Nó là dạng phủ nhận hệ quả để phủ nhận giả thiết."),
("Logic mệnh đề", "Sự khác nhau giữa Modus Ponens và Modus Tollens là gì?",
"Modus Ponens khẳng định tiền đề để suy ra hệ quả (p đúng suy ra q đúng), còn Modus Tollens phủ nhận hệ quả để suy ra phủ nhận tiền đề (q sai suy ra p sai). Cả hai đều dựa trên phép kéo theo p → q."),
("Logic mệnh đề", "Phép kéo theo là gì?",
"Phép kéo theo p → q là phép toán logic chỉ sai khi p đúng mà q sai. Trong mọi trường hợp khác, phép kéo theo đều cho giá trị đúng."),
("Logic mệnh đề", "Thế nào là phép kéo theo trong logic?",
"Phép kéo theo p → q là phép toán logic chỉ sai khi p đúng mà q sai. Trong mọi trường hợp khác, phép kéo theo đều cho giá trị đúng."),
("Logic mệnh đề", "Phép tương đương logic là gì?",
"Phép tương đương p ↔ q đúng khi cả p và q cùng đúng hoặc cùng sai. Nó tương đương với (p → q) ∧ (q → p)."),
("Logic mệnh đề", "Hằng đúng và hằng sai là gì?",
"Hằng đúng (tautology) là mệnh đề luôn đúng với mọi giá trị chân lý của các biến. Hằng sai (contradiction) là mệnh đề luôn sai với mọi giá trị chân lý của các biến."),
("Logic mệnh đề", "Giải thích khái niệm tautology.",
"Hằng đúng (tautology) là mệnh đề luôn đúng với mọi giá trị chân lý của các biến. Ví dụ: p ∨ ¬p luôn đúng bất kể p đúng hay sai."),
("Logic mệnh đề", "Luật giao hoán trong logic là gì?",
"Luật giao hoán phát biểu rằng p ∧ q tương đương q ∧ p, và p ∨ q tương đương q ∨ p. Thứ tự các mệnh đề không ảnh hưởng đến kết quả."),
("Logic mệnh đề", "Luật kết hợp trong logic là gì?",
"Luật kết hợp phát biểu rằng (p ∧ q) ∧ r tương đương p ∧ (q ∧ r), và tương tự cho phép tuyển. Cách nhóm các mệnh đề không ảnh hưởng đến kết quả."),
("Logic mệnh đề", "Luật phân phối trong logic là gì?",
"Luật phân phối phát biểu rằng p ∧ (q ∨ r) tương đương (p ∧ q) ∨ (p ∧ r), và p ∨ (q ∧ r) tương đương (p ∨ q) ∧ (p ∨ r)."),
("Logic mệnh đề", "Luật hấp thụ trong logic là gì?",
"Luật hấp thụ phát biểu rằng p ∨ (p ∧ q) tương đương p, và p ∧ (p ∨ q) cũng tương đương p."),
("Logic mệnh đề", "Luật phủ định kép là gì?",
"Luật phủ định kép phát biểu rằng ¬(¬p) tương đương p. Phủ định hai lần một mệnh đề cho lại chính mệnh đề ban đầu."),
("Logic mệnh đề", "Dạng chuẩn tắc tuyển là gì?",
"Dạng chuẩn tắc tuyển (DNF) là biểu thức logic được viết dưới dạng tuyển của các hội cơ bản, ví dụ (p ∧ q) ∨ (¬p ∧ r)."),
("Logic mệnh đề", "Dạng chuẩn tắc hội là gì?",
"Dạng chuẩn tắc hội (CNF) là biểu thức logic được viết dưới dạng hội của các tuyển cơ bản, ví dụ (p ∨ q) ∧ (¬p ∨ r)."),
("Logic mệnh đề", "Bảng chân lý là gì?",
"Bảng chân lý là bảng liệt kê tất cả các tổ hợp giá trị chân lý có thể của các biến mệnh đề và giá trị tương ứng của biểu thức logic. Với n biến, bảng chân lý có 2^n dòng."),
("Logic mệnh đề", "Bảng chân lý dùng để làm gì?",
"Bảng chân lý dùng để kiểm tra tính đúng sai của biểu thức logic trong mọi trường hợp, xác định xem biểu thức có phải là hằng đúng, hằng sai hay thỏa được."),
# ====================== LOGIC VỊ TỪ ======================
("Logic vị từ", "Lượng từ phổ dụng là gì?",
"Lượng từ phổ dụng ∀ (với mọi) biểu thị rằng mệnh đề đúng cho tất cả các phần tử trong miền xét. Ví dụ ∀x P(x) nghĩa là P(x) đúng với mọi x."),
("Logic vị từ", "Giải thích lượng từ với mọi.",
"Lượng từ phổ dụng ∀ (với mọi) biểu thị rằng mệnh đề đúng cho tất cả các phần tử trong miền xét. Ví dụ ∀x P(x) nghĩa là P(x) đúng với mọi x."),
("Logic vị từ", "Lượng từ tồn tại là gì?",
"Lượng từ tồn tại ∃ (tồn tại) biểu thị rằng có ít nhất một phần tử trong miền xét làm cho mệnh đề đúng. Ví dụ ∃x P(x) nghĩa là tồn tại x sao cho P(x) đúng."),
("Logic vị từ", "Phủ định lượng từ phổ dụng cho kết quả gì?",
"Phủ định lượng từ phổ dụng: ¬(∀x P(x)) tương đương ∃x ¬P(x). Nghĩa là nếu không phải mọi x đều thỏa P(x), thì tồn tại ít nhất một x không thỏa P(x)."),
# ====================== LÝ THUYẾT ĐỒ THỊ ======================
("Lý thuyết đồ thị", "Sự khác nhau giữa đường đi Euler và đường đi Hamilton là gì?",
"Đường đi Euler đi qua mỗi cạnh đúng một lần, còn đường đi Hamilton đi qua mỗi đỉnh đúng một lần. Điều kiện tồn tại của chúng cũng hoàn toàn khác nhau."),
("Lý thuyết đồ thị", "So sánh đường đi Euler và đường đi Hamilton.",
"Đường đi Euler đi qua mỗi cạnh đúng một lần, còn đường đi Hamilton đi qua mỗi đỉnh đúng một lần. Điều kiện tồn tại của chúng cũng hoàn toàn khác nhau."),
("Lý thuyết đồ thị", "Euler và Hamilton khác nhau chỗ nào?",
"Đường đi Euler đi qua mỗi cạnh đúng một lần, còn đường đi Hamilton đi qua mỗi đỉnh đúng một lần. Điều kiện tồn tại của chúng cũng hoàn toàn khác nhau."),
("Lý thuyết đồ thị", "Điều kiện để đồ thị có chu trình Euler là gì?",
"Đồ thị vô hướng liên thông có chu trình Euler khi và chỉ khi mọi đỉnh đều có bậc chẵn. Đồ thị có hướng có chu trình Euler khi liên thông mạnh và mỗi đỉnh có bậc vào bằng bậc ra."),
("Lý thuyết đồ thị", "Khi nào đồ thị có chu trình Euler?",
"Đồ thị vô hướng liên thông có chu trình Euler khi và chỉ khi mọi đỉnh đều có bậc chẵn. Đồ thị có hướng có chu trình Euler khi liên thông mạnh và mỗi đỉnh có bậc vào bằng bậc ra."),
("Lý thuyết đồ thị", "Thuật toán Dijkstra dùng để làm gì?",
"Thuật toán Dijkstra tìm đường đi ngắn nhất từ một đỉnh nguồn đến tất cả các đỉnh còn lại trong đồ thị có trọng số không âm. Thuật toán sử dụng chiến lược tham lam, lần lượt chọn đỉnh có khoảng cách nhỏ nhất."),
("Lý thuyết đồ thị", "Giải thích thuật toán Dijkstra.",
"Thuật toán Dijkstra tìm đường đi ngắn nhất từ một đỉnh nguồn đến tất cả các đỉnh còn lại trong đồ thị có trọng số không âm. Thuật toán sử dụng chiến lược tham lam, lần lượt chọn đỉnh có khoảng cách nhỏ nhất."),
("Lý thuyết đồ thị", "Dijkstra hoạt động như thế nào?",
"Thuật toán Dijkstra tìm đường đi ngắn nhất từ một đỉnh nguồn đến tất cả các đỉnh còn lại trong đồ thị có trọng số không âm. Thuật toán sử dụng chiến lược tham lam, lần lượt chọn đỉnh có khoảng cách nhỏ nhất."),
("Lý thuyết đồ thị", "Cây khung nhỏ nhất là gì?",
"Cây khung nhỏ nhất (Minimum Spanning Tree) của đồ thị liên thông có trọng số là cây khung có tổng trọng số các cạnh nhỏ nhất. Có thể tìm bằng thuật toán Kruskal hoặc Prim."),
("Lý thuyết đồ thị", "Thế nào là cây khung nhỏ nhất?",
"Cây khung nhỏ nhất (Minimum Spanning Tree) của đồ thị liên thông có trọng số là cây khung có tổng trọng số các cạnh nhỏ nhất. Có thể tìm bằng thuật toán Kruskal hoặc Prim."),
("Lý thuyết đồ thị", "Thuật toán Kruskal là gì?",
"Thuật toán Kruskal tìm cây khung nhỏ nhất bằng cách sắp xếp các cạnh theo trọng số tăng dần, rồi lần lượt thêm cạnh vào cây khung nếu cạnh đó không tạo chu trình."),
("Lý thuyết đồ thị", "Giải thích thuật toán Kruskal.",
"Thuật toán Kruskal tìm cây khung nhỏ nhất bằng cách sắp xếp các cạnh theo trọng số tăng dần, rồi lần lượt thêm cạnh vào cây khung nếu cạnh đó không tạo chu trình."),
("Lý thuyết đồ thị", "Thuật toán Prim là gì?",
"Thuật toán Prim tìm cây khung nhỏ nhất bằng cách bắt đầu từ một đỉnh bất kỳ, rồi liên tục thêm cạnh có trọng số nhỏ nhất nối cây hiện tại với đỉnh chưa thuộc cây."),
("Lý thuyết đồ thị", "So sánh thuật toán Kruskal và Prim.",
"Kruskal sắp xếp cạnh theo trọng số rồi chọn từng cạnh, phù hợp đồ thị thưa. Prim mở rộng cây từ 1 đỉnh, phù hợp đồ thị dày. Cả hai đều cho cây khung nhỏ nhất nhưng tiếp cận khác nhau."),
("Lý thuyết đồ thị", "Đồ thị phẳng là gì?",
"Đồ thị phẳng là đồ thị có thể vẽ trên mặt phẳng sao cho không có hai cạnh nào cắt nhau ngoài tại đỉnh chung. Theo định lý Kuratowski, đồ thị phẳng khi và chỉ khi không chứa đồ thị con con co được đẳng cấu với K5 hoặc K3,3."),
("Lý thuyết đồ thị", "Công thức Euler cho đồ thị phẳng là gì?",
"Công thức Euler phát biểu rằng V - E + F = 2, trong đó V là số đỉnh, E là số cạnh, và F là số mặt (bao gồm mặt ngoài) của đồ thị phẳng liên thông."),
("Lý thuyết đồ thị", "BFS là gì?",
"BFS (Breadth-First Search) là thuật toán duyệt đồ thị theo chiều rộng. Bắt đầu từ đỉnh nguồn, duyệt tất cả các đỉnh kề trước, rồi mới đến các đỉnh xa hơn. Dùng hàng đợi (queue) để quản lý thứ tự duyệt."),
("Lý thuyết đồ thị", "Thuật toán duyệt theo chiều rộng hoạt động như thế nào?",
"BFS (Breadth-First Search) là thuật toán duyệt đồ thị theo chiều rộng. Bắt đầu từ đỉnh nguồn, duyệt tất cả các đỉnh kề trước, rồi mới đến các đỉnh xa hơn. Dùng hàng đợi (queue) để quản lý thứ tự duyệt."),
("Lý thuyết đồ thị", "DFS là gì?",
"DFS (Depth-First Search) là thuật toán duyệt đồ thị theo chiều sâu. Bắt đầu từ đỉnh nguồn, đi sâu nhất có thể trước khi quay lui. Dùng ngăn xếp (stack) hoặc đệ quy để quản lý thứ tự duyệt."),
("Lý thuyết đồ thị", "So sánh BFS và DFS.",
"BFS duyệt theo chiều rộng dùng hàng đợi, tìm đường đi ngắn nhất trong đồ thị không trọng số. DFS duyệt theo chiều sâu dùng ngăn xếp, phù hợp phát hiện chu trình và sắp xếp topo."),
("Lý thuyết đồ thị", "Đồ thị hai phía là gì?",
"Đồ thị hai phía (bipartite graph) là đồ thị có thể chia tập đỉnh thành hai tập rời nhau sao cho mọi cạnh đều nối một đỉnh ở tập này với một đỉnh ở tập kia. Đồ thị hai phía khi và chỉ khi không chứa chu trình có độ dài lẻ."),
("Lý thuyết đồ thị", "Bậc của đỉnh trong đồ thị là gì?",
"Bậc của đỉnh v, ký hiệu deg(v), là số cạnh liên thuộc với đỉnh đó. Theo Bổ đề Bắt tay, tổng bậc của tất cả các đỉnh luôn bằng hai lần số cạnh."),
("Lý thuyết đồ thị", "Bổ đề Bắt tay phát biểu điều gì?",
"Bổ đề Bắt tay phát biểu rằng tổng bậc của tất cả các đỉnh trong đồ thị bằng hai lần số cạnh: Σ deg(v) = 2|E|. Hệ quả: số đỉnh bậc lẻ luôn là số chẵn."),
("Lý thuyết đồ thị", "Đồ thị đầy đủ là gì?",
"Đồ thị đầy đủ K_n là đồ thị vô hướng có n đỉnh trong đó mỗi cặp đỉnh đều được nối bởi đúng một cạnh. Số cạnh của K_n là n(n-1)/2."),
("Lý thuyết đồ thị", "Cây là gì trong lý thuyết đồ thị?",
"Cây là đồ thị vô hướng liên thông không có chu trình. Một cây có n đỉnh luôn có đúng n-1 cạnh. Giữa hai đỉnh bất kỳ trong cây luôn tồn tại duy nhất một đường đi."),
("Lý thuyết đồ thị", "Tô màu đồ thị là gì?",
"Tô màu đồ thị là việc gán màu cho các đỉnh sao cho hai đỉnh kề nhau không cùng màu. Số sắc ký χ(G) là số màu tối thiểu cần dùng để tô hợp lệ đồ thị G."),
# ====================== BÀI TOÁN TỔ HỢP ======================
("Bài toán tổ hợp", "Nguyên lý Dirichlet là gì?",
"Nguyên lý Dirichlet (nguyên lý chuồng bồ câu) phát biểu rằng nếu n+1 vật được đặt vào n hộp, thì ít nhất một hộp chứa từ 2 vật trở lên."),
("Bài toán tổ hợp", "Giải thích nguyên lý chuồng bồ câu.",
"Nguyên lý Dirichlet (nguyên lý chuồng bồ câu) phát biểu rằng nếu n+1 vật được đặt vào n hộp, thì ít nhất một hộp chứa từ 2 vật trở lên."),
("Bài toán tổ hợp", "Nguyên lý bù trừ là gì?",
"Nguyên lý bù trừ (Inclusion-Exclusion) tính lực lượng hợp của nhiều tập hợp bằng cách cộng lực lượng từng tập, trừ giao từng cặp, cộng giao từng bộ ba, và cứ tiếp tục luân phiên."),
("Bài toán tổ hợp", "Giải thích nguyên lý bao hàm loại trừ.",
"Nguyên lý bù trừ (Inclusion-Exclusion) tính lực lượng hợp của nhiều tập hợp bằng cách cộng lực lượng từng tập, trừ giao từng cặp, cộng giao từng bộ ba, và cứ tiếp tục luân phiên."),
("Bài toán tổ hợp", "Hệ thức truy hồi là gì?",
"Hệ thức truy hồi là phương trình biểu diễn giá trị của một dãy số thông qua các giá trị trước đó. Ví dụ dãy Fibonacci: F(n) = F(n-1) + F(n-2) với F(0)=0, F(1)=1."),
("Bài toán tổ hợp", "Cho ví dụ về hệ thức truy hồi.",
"Ví dụ kinh điển nhất là dãy Fibonacci: F(n) = F(n-1) + F(n-2) với F(0)=0, F(1)=1. Các giá trị: 0, 1, 1, 2, 3, 5, 8, 13, 21..."),
("Bài toán tổ hợp", "Tam giác Pascal là gì?",
"Tam giác Pascal là cách sắp xếp hệ số nhị thức C(n,k) thành hình tam giác, trong đó mỗi số bằng tổng hai số ở hàng trên kề nó. Hàng thứ n chứa các hệ số C(n,0), C(n,1), ..., C(n,n)."),
("Bài toán tổ hợp", "Định lý nhị thức Newton là gì?",
"Định lý nhị thức Newton phát biểu (a+b)^n = Σ C(n,k) * a^(n-k) * b^k, với k chạy từ 0 đến n. Hệ số C(n,k) chính là tổ hợp chập k của n."),
("Bài toán tổ hợp", "Hoán vị lặp là gì?",
"Hoán vị lặp của n phần tử trong đó có n1 phần tử loại 1, n2 phần tử loại 2,..., nk phần tử loại k là n! / (n1! * n2! * ... * nk!)."),
("Bài toán tổ hợp", "Tổ hợp lặp là gì?",
"Tổ hợp lặp chập k của n là số cách chọn k phần tử từ n loại phần tử, cho phép chọn lặp lại, bằng C(n+k-1, k)."),
# ====================== QUAN HỆ ======================
("Quan hệ", "Quan hệ tương đương là gì?",
"Quan hệ tương đương là quan hệ vừa phản xạ, vừa đối xứng, vừa bắc cầu. Nó chia tập hợp thành các lớp tương đương rời nhau, tạo thành một phân hoạch."),
("Quan hệ", "Giải thích quan hệ tương đương.",
"Quan hệ tương đương là quan hệ vừa phản xạ, vừa đối xứng, vừa bắc cầu. Nó chia tập hợp thành các lớp tương đương rời nhau, tạo thành một phân hoạch."),
("Quan hệ", "Thế nào là quan hệ tương đương?",
"Quan hệ tương đương là quan hệ vừa phản xạ, vừa đối xứng, vừa bắc cầu. Nó chia tập hợp thành các lớp tương đương rời nhau, tạo thành một phân hoạch."),
("Quan hệ", "Bao đóng bắc cầu là gì?",
"Bao đóng bắc cầu của quan hệ R là quan hệ nhỏ nhất chứa R và có tính bắc cầu. Có thể tính bằng thuật toán Warshall hoặc lũy thừa ma trận."),
("Quan hệ", "Giải thích bao đóng bắc cầu.",
"Bao đóng bắc cầu của quan hệ R là quan hệ nhỏ nhất chứa R và có tính bắc cầu. Có thể tính bằng thuật toán Warshall hoặc lũy thừa ma trận."),
("Quan hệ", "Thuật toán Warshall là gì?",
"Thuật toán Warshall dùng để tính bao đóng bắc cầu của quan hệ bằng cách cập nhật ma trận quan hệ. Với mỗi đỉnh trung gian k, nếu có đường từ i đến k và từ k đến j thì thêm đường từ i đến j."),
("Quan hệ", "Phân hoạch tập hợp là gì?",
"Phân hoạch của tập A là một tập hợp các tập con không rỗng, đôi một rời nhau, mà hợp của chúng bằng A. Mỗi quan hệ tương đương trên A sinh ra một phân hoạch duy nhất."),
# ====================== LÝ THUYẾT SỐ ======================
("Lý thuyết số", "Thuật toán Euclide là gì?",
"Thuật toán Euclide tìm ước chung lớn nhất GCD(a,b) bằng cách lặp: GCD(a,b) = GCD(b, a mod b) cho đến khi b = 0. Khi đó GCD = a. Thuật toán rất hiệu quả với độ phức tạp O(log n)."),
("Lý thuyết số", "Giải thích thuật toán Euclide.",
"Thuật toán Euclide tìm ước chung lớn nhất GCD(a,b) bằng cách lặp: GCD(a,b) = GCD(b, a mod b) cho đến khi b = 0. Khi đó GCD = a. Thuật toán rất hiệu quả với độ phức tạp O(log n)."),
("Lý thuyết số", "Thuật toán Euclide mở rộng là gì?",
"Thuật toán Euclide mở rộng không chỉ tìm GCD(a,b) mà còn tìm các số nguyên x, y thỏa ax + by = GCD(a,b). Ứng dụng quan trọng trong tìm nghịch đảo modular."),
("Lý thuyết số", "Định lý Euler là gì?",
"Định lý Euler phát biểu rằng nếu GCD(a,n) = 1 thì a^φ(n) ≡ 1 (mod n), trong đó φ(n) là hàm Euler đếm số nguyên dương nhỏ hơn n và nguyên tố cùng nhau với n."),
("Lý thuyết số", "Hàm Euler là gì?",
"Hàm Euler φ(n) đếm số các số nguyên dương nhỏ hơn hoặc bằng n và nguyên tố cùng nhau với n. Ví dụ φ(12) = 4 vì có 4 số: 1, 5, 7, 11."),
("Lý thuyết số", "Định lý nhỏ Fermat phát biểu điều gì?",
"Định lý nhỏ Fermat: Nếu p là số nguyên tố và a không chia hết cho p, thì a^(p-1) ≡ 1 (mod p). Đây là trường hợp đặc biệt của Định lý Euler khi n là số nguyên tố."),
("Lý thuyết số", "Phép đồng dư là gì?",
"a đồng dư b theo modulo m (viết a ≡ b mod m) khi m chia hết hiệu a - b. Phép đồng dư bảo toàn qua phép cộng, trừ và nhân, rất hữu ích trong mật mã học."),
("Lý thuyết số", "Số nguyên tố là gì?",
"Số nguyên tố là số tự nhiên lớn hơn 1 chỉ có đúng hai ước là 1 và chính nó. Ví dụ: 2, 3, 5, 7, 11, 13 là các số nguyên tố."),
("Lý thuyết số", "Sàng Eratosthenes là gì?",
"Sàng Eratosthenes là thuật toán tìm tất cả số nguyên tố nhỏ hơn n bằng cách loại bỏ dần các bội số. Bắt đầu từ 2, đánh dấu tất cả bội của 2, rồi chuyển sang số chưa đánh dấu tiếp theo."),
("Lý thuyết số", "Đồng dư tuyến tính là gì?",
"Phương trình đồng dư tuyến tính ax ≡ b (mod m) có nghiệm khi và chỉ khi GCD(a,m) chia hết b. Nếu có nghiệm, nó có đúng GCD(a,m) nghiệm không đồng dư modulo m."),
("Lý thuyết số", "Định lý phần dư Trung Hoa là gì?",
"Định lý phần dư Trung Hoa (CRT) phát biểu rằng nếu m1, m2, ..., mk đôi một nguyên tố cùng nhau thì hệ phương trình x ≡ a_i (mod m_i) có nghiệm duy nhất modulo tích m1*m2*...*mk."),
# ====================== ÁNH XẠ ======================
("Ánh xạ", "Song ánh là gì?",
"Song ánh (bijection) là ánh xạ vừa là đơn ánh vừa là toàn ánh. Nghĩa là mỗi phần tử của tập đích là ảnh của đúng một phần tử của tập nguồn. Song ánh có nghịch đảo."),
("Ánh xạ", "Thế nào là song ánh?",
"Song ánh (bijection) là ánh xạ vừa là đơn ánh vừa là toàn ánh. Nghĩa là mỗi phần tử của tập đích là ảnh của đúng một phần tử của tập nguồn. Song ánh có nghịch đảo."),
("Ánh xạ", "Hợp thành ánh xạ là gì?",
"Hợp thành của ánh xạ f: A→B và g: B→C là ánh xạ g∘f: A→C, trong đó (g∘f)(x) = g(f(x)). Hợp thành ánh xạ có tính kết hợp nhưng không có tính giao hoán."),
("Ánh xạ", "Ánh xạ nghịch đảo là gì?",
"Ánh xạ f: A→B có nghịch đảo f⁻¹: B→A khi và chỉ khi f là song ánh. Khi đó f⁻¹(y) = x nếu và chỉ nếu f(x) = y."),
# ====================== TẬP HỢP ======================
("Tập hợp", "Tích Descartes là gì?",
"Tích Descartes A × B là tập hợp tất cả các cặp có thứ tự (a, b) trong đó a thuộc A và b thuộc B. Lực lượng |A × B| = |A| × |B|."),
("Tập hợp", "Giải thích tích Descartes.",
"Tích Descartes A × B là tập hợp tất cả các cặp có thứ tự (a, b) trong đó a thuộc A và b thuộc B. Lực lượng |A × B| = |A| × |B|."),
("Tập hợp", "Tập lũy thừa là gì?",
"Tập lũy thừa P(A) của tập A là tập hợp tất cả các tập con của A, kể cả tập rỗng và chính A. Nếu |A| = n thì |P(A)| = 2^n."),
("Tập hợp", "Tập lũy thừa có bao nhiêu phần tử?",
"Nếu tập A có n phần tử thì tập lũy thừa P(A) có 2^n phần tử. Ví dụ A = {1,2} thì P(A) = {∅, {1}, {2}, {1,2}} có 4 phần tử."),
("Tập hợp", "Luật De Morgan cho tập hợp là gì?",
"Luật De Morgan cho tập hợp: phần bù của hợp bằng giao các phần bù (A ∪ B)ᶜ = Aᶜ ∩ Bᶜ, và phần bù của giao bằng hợp các phần bù (A ∩ B)ᶜ = Aᶜ ∪ Bᶜ."),
# ====================== QUY NẠP TOÁN HỌC ======================
("Suy luận toán học", "Phương pháp quy nạp toán học là gì?",
"Quy nạp toán học gồm hai bước: Bước cơ sở (chứng minh mệnh đề đúng cho n = n₀) và Bước quy nạp (giả sử đúng cho n = k, chứng minh đúng cho n = k+1). Nếu cả hai bước đều thỏa, mệnh đề đúng cho mọi n ≥ n₀."),
("Suy luận toán học", "Giải thích quy nạp toán học.",
"Quy nạp toán học gồm hai bước: Bước cơ sở (chứng minh mệnh đề đúng cho n = n₀) và Bước quy nạp (giả sử đúng cho n = k, chứng minh đúng cho n = k+1). Nếu cả hai bước đều thỏa, mệnh đề đúng cho mọi n ≥ n₀."),
("Suy luận toán học", "Quy nạp mạnh khác gì quy nạp thường?",
"Quy nạp thường giả sử mệnh đề đúng cho n = k rồi chứng minh cho k+1. Quy nạp mạnh giả sử mệnh đề đúng cho tất cả n₀ ≤ i ≤ k rồi chứng minh cho k+1. Quy nạp mạnh linh hoạt hơn trong nhiều trường hợp."),
("Suy luận toán học", "Chứng minh phản chứng là gì?",
"Chứng minh phản chứng là phương pháp giả sử mệnh đề cần chứng minh là sai, rồi suy luận ra một mâu thuẫn. Từ đó kết luận mệnh đề ban đầu phải đúng."),
# ====================== XÁC SUẤT RỜI RẠC (bổ sung) ======================
("Xác suất rời rạc", "Phân phối Poisson là gì?",
"Phân phối Poisson mô tả số lần xảy ra của sự kiện hiếm trong khoảng thời gian hoặc không gian cố định. Công thức P(X=k) = (λ^k * e^(-λ)) / k!, với λ là số trung bình sự kiện."),
("Xác suất rời rạc", "Phân phối hình học là gì?",
"Phân phối hình học mô tả số phép thử Bernoulli cần thực hiện đến khi có thành công đầu tiên. Công thức P(X=k) = (1-p)^(k-1) * p."),
("Xác suất rời rạc", "Hiệp phương sai là gì?",
"Hiệp phương sai Cov(X,Y) đo mức độ biến thiên cùng nhau của hai biến ngẫu nhiên. Cov(X,Y) = E(XY) - E(X)E(Y). Nếu X, Y độc lập thì Cov(X,Y) = 0."),
("Xác suất rời rạc", "Phương sai của biến ngẫu nhiên là gì?",
"Phương sai Var(X) = E(X²) - [E(X)]² đo mức độ phân tán của biến ngẫu nhiên quanh giá trị kỳ vọng. Phương sai luôn không âm. Độ lệch chuẩn là căn bậc hai của phương sai."),
# ====================== ĐẠI SỐ BOOLE ======================
("Đại số Boole", "Đại số Boole là gì?",
"Đại số Boole là hệ thống đại số trên tập {0, 1} với ba phép toán: AND (∧), OR (∨), NOT (¬). Nó là nền tảng toán học cho thiết kế mạch logic và khoa học máy tính."),
("Đại số Boole", "Giải thích đại số Boole.",
"Đại số Boole là hệ thống đại số trên tập {0, 1} với ba phép toán: AND (∧), OR (∨), NOT (¬). Nó là nền tảng toán học cho thiết kế mạch logic và khoa học máy tính."),
("Đại số Boole", "Hàm Boole là gì?",
"Hàm Boole là hàm f: {0,1}^n → {0,1}, nhận n biến nhị phân và trả về giá trị 0 hoặc 1. Mọi hàm Boole đều có thể biểu diễn dưới dạng chuẩn tắc tuyển (DNF) hoặc chuẩn tắc hội (CNF)."),
("Đại số Boole", "Bản đồ Karnaugh dùng để làm gì?",
"Bản đồ Karnaugh là phương pháp đồ họa để tối giản hàm Boole. Bằng cách nhóm các ô kề nhau có giá trị 1, ta tìm được biểu thức tối giản với ít biến nhất."),
# ====================== AUTOMAT VÀ NGÔN NGỮ HÌNH THỨC ======================
("Automat", "Automat hữu hạn là gì?",
"Automat hữu hạn (Finite Automaton) là mô hình toán học gồm tập hữu hạn các trạng thái, bảng chữ cái đầu vào, hàm chuyển trạng thái, trạng thái bắt đầu và tập trạng thái chấp nhận. Dùng để nhận dạng ngôn ngữ chính quy."),
("Automat", "DFA và NFA khác nhau chỗ nào?",
"DFA (Deterministic FA) có đúng một phép chuyển cho mỗi cặp (trạng thái, ký tự). NFA (Nondeterministic FA) cho phép nhiều phép chuyển hoặc không phép chuyển nào. Mọi NFA đều có thể chuyển thành DFA tương đương."),
("Automat", "Biểu thức chính quy là gì?",
"Biểu thức chính quy (Regular Expression) là cách biểu diễn ngôn ngữ chính quy bằng các phép toán: hợp (|), nối (.), và bao đóng Kleene (*). Mỗi biểu thức chính quy tương đương với một automat hữu hạn."),
]
def main():
# Đếm số dòng hiện tại
existing_count = 0
if os.path.exists(OUTPUT_CSV):
with open(OUTPUT_CSV, 'r', encoding='utf-8-sig') as f:
existing_count = sum(1 for line in f) - 1 # trừ header
# Nối thêm data vào file
with open(OUTPUT_CSV, 'a', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
for topic, question, answer in EXTRA_DATA:
writer.writerow([topic, question, answer])
new_count = len(EXTRA_DATA)
print(f"\n{'='*55}")
print(f" SINH DATA HOÀN TẤT!")
print(f"{'='*55}")
print(f" Data cũ : {existing_count} dòng")
print(f" Data mới thêm : {new_count} dòng")
print(f" Tổng cộng : {existing_count + new_count} dòng")
print(f" File : {OUTPUT_CSV}")
print(f"{'='*55}")
if __name__ == "__main__":
main()