继续上一章节
6. 高级开发示例:有限状态机与正则表达式引擎
问题描述
有限状态机(Finite State Machine, FSM)是离散数学的核心概念之一,可用于解析正则表达式。实现一个简化的正则表达式引擎,支持字符匹配、*
和 .
操作符。
理论基础
- 正则表达式: 由字符与操作符构成,用于描述字符串模式。
- 有限状态机: 通过状态转移实现正则表达式的解析。
Python 实现:正则表达式引擎
class SimpleRegexEngine:
def is_match(self, text, pattern):
if not pattern:
return not text
first_match = bool(text) and pattern[0] in {text[0], '.'}
if len(pattern) >= 2 and pattern[1] == '*':
return (self.is_match(text, pattern[2:]) or
(first_match and self.is_match(text[1:], pattern)))
else:
return first_match and self.is_match(text[1:], pattern[1:])
# 示例
engine = SimpleRegexEngine()
tests = [
("abc", "a.c", True),
("aaa", "a*", True),
("mississippi", "mis*is*p*.", False)
]
for text, pattern, expected in tests:
result = engine.is_match(text, pattern)
print(f"文本: {text}, 模式: {pattern}, 匹配结果: {result}, 预期: {expected}")
输出结果
文本: abc, 模式: a.c, 匹配结果: True, 预期: True
文本: aaa, 模式: a*, 匹配结果: True, 预期: True
文本: mississippi, 模式: mis*is*p*., 匹配结果: False, 预期: False
7. 实践与扩展:密码学中的离散数学
问题描述
RSA 是现代密码学的基石,基于大整数分解的困难性。离散数学中的模运算和欧拉函数在其加密与解密中发挥关键作用。
理论基础
RSA 的加密与解密流程:
1. 选择两个大质数 (p) 和 (q),计算 (n = p \cdot q)。
2. 计算欧拉函数 (\phi(n) = (p-1)(q-1))。
3. 选择公钥 (e),满足 (1 < e < \phi(n)) 且 (\gcd(e, \phi(n)) = 1)。
4. 计算私钥 (d),满足 (e \cdot d \equiv 1 \pmod{\phi(n)})。
Python 实现:RSA 加密解密
from math import gcd
def mod_inverse(e, phi):
for d in range(1, phi):
if (e * d) % phi == 1:
return d
return None
def rsa_encrypt_decrypt():
# 1. 初始化参数
p, q = 61, 53
n = p * q
phi = (p - 1) * (q - 1)
e = 17 # 公钥
d = mod_inverse(e, phi) # 私钥
# 2. 加密
message = 42
encrypted = pow(message, e, n)
# 3. 解密
decrypted = pow(encrypted, d, n)
return encrypted, decrypted
encrypted, decrypted = rsa_encrypt_decrypt()
print(f"加密结果: {encrypted}, 解密结果: {decrypted}")
输出结果
加密结果: 2557, 解密结果: 42
8. 推荐书籍与资源
书籍推荐
• 《离散数学及其应用》 (Kenneth H. Rosen)
权威教材,涵盖离散数学的理论与应用。
• 《图论及其应用》 (Douglas B. West)
深入探讨图论的核心概念与算法。
GitHub 优质开源项目
• Regex Engine
实现正则表达式引擎的教程与代码。
• PyCrypto RSA
一个支持多种加密算法的 Python 库。
如果你觉得我写的文章对你有所帮助,那么请点赞并关注支持一下作者!谢谢各位 😁
使用的编程语言及工具
• 编程语言: Python
• 工具: Jupyter Notebook、VS Code
可以通过以下方式联系到作者(不闲聊):
WeChat:WillWieck
Tiktok:
https://www.tiktok.com/@activeus_worldice?_t=ZT-8smC79Dw81m&_r=1
知乎 :
https://www.zhihu.com/people/436d2d72254583a8cea1cd7195e495c4
EMail:
WCLONZE0000001@outlook.com
worldcoin@worldfoundation.online
FaceBook:
Diomr HS
X:
https://x.com/yikelovehongshu?s=21