惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
博客园_首页
N
News | PayPal Newsroom
有赞技术团队
有赞技术团队
The Hacker News
The Hacker News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
S
SegmentFault 最新的问题
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
P
Privacy & Cybersecurity Law Blog
AI
AI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Schneier on Security
Schneier on Security
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
量子位
Forbes - Security
Forbes - Security
爱范儿
爱范儿
云风的 BLOG
云风的 BLOG
SecWiki News
SecWiki News
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tor Project blog
Recorded Future
Recorded Future
A
About on SuperTechFans
J
Java Code Geeks
The Register - Security
The Register - Security
PCI Perspectives
PCI Perspectives
H
Hacker News: Front Page
V2EX - 技术
V2EX - 技术
S
Secure Thoughts
V
Vulnerabilities – Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Scott Helme
Scott Helme
T
The Exploit Database - CXSecurity.com
Y
Y Combinator Blog
AWS News Blog
AWS News Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
IT之家
IT之家
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
C
CERT Recently Published Vulnerability Notes
L
LangChain Blog
F
Full Disclosure
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The GitHub Blog
The GitHub Blog

姓王者的博客

Linux用户Secure Boot自主维护指南 | 姓王者的博客 MAD Bugs 已经开始——关于信息安全的军备竞赛 | 姓王者的博客 解决钉钉Dingtalk无法在Linux新版内核上启动问题-修复可执行栈错误 | 姓王者的博客 突发:GitHub 正遭受大规模 Issue 赌博广告轰炸 | 姓王者的博客 Ubuntu26.04-beta体验:坚毅浣熊! | 姓王者的博客 fakeclaw装作龙虾发贴吧 | 姓王者的博客 找回12年前的QQ记忆 | 姓王者的博客 在Linux上玩Flash网页游戏-洛克王国 | 姓王者的博客 Copilot将使用交互数据来训练 | 姓王者的博客 重要通知-请更新我的GPG公钥 | 姓王者的博客 为了自由Android | 姓王者的博客 GPL"2,3"事 | 姓王者的博客 短文-对VitePlus的一点🤏小贡献 | 姓王者的博客 Bing收录没了?亲测有效的快速恢复指南 | 姓王者的博客 解决桌面设备二维码快速识别的工具-ClipQR | 姓王者的博客 解决 Nautilus 自定义终端插件安装依赖问题 | 姓王者的博客 OpenClaw 该熄火了 | 姓王者的博客 Vite8 - 统一的基建开始 | 姓王者的博客 Astro 6 推出啦 | 姓王者的博客 ubuntu的openvpn异常暂停推送更新 | 姓王者的博客 Ubuntu 24.04 安装 Win10 虚拟机 | 姓王者的博客 ESA-后记:热爱阿里云 | 姓王者的博客 Moonbit 0.8.0 重大发布,我也要改一下我的包 | 姓王者的博客 ESA Pages 边缘开发大赛获奖 | 姓王者的博客 Astro: 优化katex,mermaid和灯箱使用 | 姓王者的博客 从edgeone迁移到esa | 姓王者的博客 出租人类:AI时代的荒诞与真实 | 姓王者的博客 Astro 5.17构建性能优化实践:从18s到13s | 姓王者的博客 Moonbit License Checker 开发使用 | 姓王者的博客 Stalux Astro博客主题自荐 | 姓王者的博客 把Hexo永久链接迁移到Astro | 姓王者的博客 再见👋 LeanCloud | 姓王者的博客 2025年终总结 | 姓王者的博客 许可合规-fancybox | 姓王者的博客 博客主题的软著下来了 | 姓王者的博客 友链图谱 - 汇聚千丝万缕的联系 | 姓王者的博客 chen-er 专为Chen式ER图打造的npm包 | 姓王者的博客 为什么我推荐你使用GPG来加密你的邮件 | 姓王者的博客 2025第三方客户端登录东北大学邮箱 | 姓王者的博客 好久没更新了,过去与未来 | 姓王者的博客 1024 重要的日子 | 姓王者的博客 再也不见Windows10 | 姓王者的博客 偷梁换柱,解决Ubuntu24.04安装Packet Tracer缺失依赖问题 | 姓王者的博客 中秋-来试试Moonbit吧 | 姓王者的博客 Obsidian使用体验 | 姓王者的博客 猪猪侠·一只老猪的逆袭 | 姓王者的博客 国庆日纪念 | 姓王者的博客 GNU 42周年,AI时代的自由精神 | 姓王者的博客 解决Linux上启动游戏总是默认English的情况 | 姓王者的博客 7x24:运维使命 | 姓王者的博客 Tauri2.x实现系统菜单导航Vue路由 | 姓王者的博客 计算机图形学-基本图形生成算法 | 姓王者的博客 数据库原理-关系数据 | 姓王者的博客 数据库原理-设计技巧 | 姓王者的博客 数据库原理E-R模型 | 姓王者的博客 旧忆 - 我曾玩过的游戏 | 姓王者的博客 再谈自由软件 | 姓王者的博客 可能解决Tauri多窗口应用阻塞问题 | 姓王者的博客 Xingwangzhe! Z-Library We miss you and we need your help | 姓王者的博客 计算机组成原理第二章 - 定点数与浮点数 | 姓王者的博客 计算机组成原理第一章 | 姓王者的博客 不小心写死循环窗口弹出了 | 姓王者的博客 美化Grub界面 | 姓王者的博客 计算机图形学-图形的表示与数据结构 | 姓王者的博客 计算机图形学绪论 | 姓王者的博客 为什么说,大学教育与社会脱节 | 姓王者的博客 VSCode Remote 远程连接服务器记录 | 姓王者的博客 解决Tauri2.x拖拽事件问题 | 姓王者的博客 新学期第一课《计算机图形学》报告 | 姓王者的博客 Tauri在GNOME46+上通知无效的临时解决方法 | 姓王者的博客 窃文者:未经授权转载我文章 | 姓王者的博客 GPG公钥分享文化 | 姓王者的博客 解决在ubuntu上,打包vscode插件问题 | 姓王者的博客 伪造squaremap的玩家显示 | 姓王者的博客 爆,沉浸式翻译泄露敏感信息 | 姓王者的博客 读书:《Free as in Freedom》——若为自由故 | 姓王者的博客 首页文章列表懒加载优化 | 姓王者的博客 Ubuntu 24.04 安装 Vivado 2018.3 | 姓王者的博客 腾讯Edgeone免费版体验 | 姓王者的博客 在 Ubuntu 上实现 Thetis FIDO U2F 密钥登录 | 姓王者的博客 Thetis物理密钥,为什么我们应该使用物理密钥 | 姓王者的博客 高考生过来看!教你精准转换录取位次! | 姓王者的博客 ubuntu无法访问windows磁盘问题 | 姓王者的博客 收信有感,防范钓鱼邮件 | 姓王者的博客 自由不止软件-记录一次zlib上传书籍 | 姓王者的博客 时隔两年,通关夺命邮差2 | 姓王者的博客 博客一周年了,竟然坚持了下来 | 姓王者的博客 Minecraft大电影:不建不散! | 姓王者的博客 是时候了解docker了! | 姓王者的博客 编译原理:LL(1)文法 | 姓王者的博客 编译原理:文法转换 | 姓王者的博客 离散数学:子群的陪集及拉格朗日定理 | 姓王者的博客 离散数学:半群,独异点 | 姓王者的博客 《人工智能生成合成内容标识办法》与个人博客--我们应该做什么? | 姓王者的博客 离散数学:代数系统(一) | 姓王者的博客 Webmapview:一个我的世界内置网页地图浏览Fabric模组 | 姓王者的博客 海岛机器人农场试玩 | 姓王者的博客 正则表达式学习 | 姓王者的博客 抓取个人博客文章目录到github主页 | 姓王者的博客 制作github贪吃蛇贡献图 | 姓王者的博客
通识学习:形式语言与自动机,布尔代数与数进制 | 姓王者的博客
作者:xingwangzhe · 2025-03-07 · via 姓王者的博客

通识学习:形式语言与自动机,布尔代数与数进制

🕒 阅读时间:4 分钟 📝 字数:1545 👀 阅读量: Loading...

这一周的学习环环相扣

概览

好多东西都是似曾相识的.要么是在上学期就讲过,要么是中学时期就有过了解.这学期开学一周,所学到的基础知识有这几点:

课程内容
形式语言与自动机计算理论学的,在编译原理的课上,老师又给大家讲了一遍
布尔代数真(11)假(00).与或非这些个概念早年在高中时期学集合论的时候有过了解
进制转换2,8,10,16等等,都是比较常用的进制了

形式语言与自动机

基本概念

字母表(Alphabet)

定义:一个有限的非空符号集合,通常用 Σ\Sigma 表示。 Σ={a,b}\Sigma = \{a, b\}Σ={0,1}\Sigma = \{0, 1\}

字符串(String)

定义:从字母表中的符号构成的有限序列。 :在 Σ={a,b}\Sigma = \{a, b\} 上,abbaabba, babbab, ε\varepsilon(空串)都是字符串。

形式语言(Formal Language)

定义:在给定字母表上的字符串的集合。 L={anbn∣n≥0}L = \{a^nb^n | n \geq 0\},表示所有由相同数量的a和b组成的字符串。

语法和语言分类

句型(Sentential Form)

定义:在推导过程中出现的、可能包含非终结符的字符串。

短语(Phrase)

定义:在推导过程中可以从某非终结符推导出的句型的一部分。

简单短语(Simple Phrase)

定义:在一步推导中由单个非终结符直接产生的子串。

句柄(Handle)

定义:在最右推导的逆过程中,句型中最左边的、能够被归约的产生式右部。

复杂示例

考虑文法 G=(VN,VT,P,S)G = (V_N, V_T, P, S),其中:

  • VN={S,A,B}V_N = \{S, A, B\}:非终结符集合
  • VT={a,b,c,d}V_T = \{a, b, c, d\}:终结符集合
  • PP:产生式集合,包含以下规则:
    • S→ABS \rightarrow AB
    • A→aAb∣abA \rightarrow aAb | ab
    • B→cBd∣cdB \rightarrow cBd | cd
  • SS:开始符号

对于字符串 w=aabccdw = aabccd

推导与语法生成树

1. 推导(Derivation)

定义:从起始符号出发,通过连续应用产生式规则得到字符串的过程。 :左推导(最左非终结符优先)、右推导(最右非终结符优先)

2. 语法生成树(Syntax Tree)

定义:表示推导过程的层次结构,根节点是起始符号,叶节点从左到右构成推导的字符串。

示例: 对于文法 G=(VN,VT,P,S)G = (V_N, V_T, P, S),其中:

  • VN={S,A,B}V_N = \{S, A, B\}:非终结符集合
  • VT={a,b,c,d}V_T = \{a, b, c, d\}:终结符集合
  • PP:产生式集合,包含以下规则:
    • S→ABS \rightarrow AB
    • A→aAb∣abA \rightarrow aAb | ab
    • B→cBd∣cdB \rightarrow cBd | cd
  • SS:开始符号

推导过程:S⇒AB⇒aAbB⇒aabB⇒aabcBd⇒aabccdS \Rightarrow AB \Rightarrow aAbB \Rightarrow aabB \Rightarrow aabcBd \Rightarrow aabccd

语法生成树:

S

/ \

A B

/| |\

a A b c B d

| |

a b c d

句型、短语、简单短语与句柄

句型(Sentential Form)

定义:在推导过程中出现的字符串,可能包含终结符和非终结符。 特点:是从起始符号开始,经过零步或多步推导得到的字符串。

短语(Phrase)

定义:如果存在推导 S⇒∗αAβ⇒∗αγβS \Rightarrow^* \alpha A \beta \Rightarrow^* \alpha \gamma \beta,那么 γ\gamma 是相对于非终结符 AA 的一个短语。 特点:是句型中可以追溯到某个非终结符的子串。

简单短语(Simple Phrase)

定义:如果 A→γA \rightarrow \gamma 是一个产生式,且存在推导 S⇒∗αAβ⇒αγβS \Rightarrow^* \alpha A \beta \Rightarrow \alpha \gamma \beta,那么 γ\gamma 是一个简单短语。 特点:是在一步推导中直接由一个非终结符产生的子串。

句柄(Handle)

定义:在最右推导的逆过程中,可以被归约的最左边的产生式右部。 特点:是规范归约过程中第一个被识别和归约的部分。

示例分析

对于上述文法和字符串 w=aabccdw = aabccd 的推导:

  1. 句型SS, ABAB, aAbBaAbB, aabBaabB, aabcBdaabcBd, aabccdaabccd 都是句型。
  2. 短语:在句型 aabcBdaabcBd 中,aabaab 是从 AA 推导出的短语,cBdcBd 是从 BB 推导出的短语。
  3. 简单短语:在 aAbBaAbB 中应用 A→abA \rightarrow ab 产生 aabBaabB 时,abab 是一个简单短语。
  4. 句柄:在句型 aabccdaabccd 的规范归约中,第一个句柄是 cdcd(对应产生式 B→cdB \rightarrow cd)。

布尔代数

值:真与假,这个很好理解

与或非,这三个就不说了,太简单了,写一些别的

1. 异或(XOR)

  • 符号(LaTeX:\oplus)或 ^(编程语言中常用)
  • 逻辑定义: 当且仅当两个输入不同时,结果为真。
  • 真值表
ABA⊕B
000
011
101
110

2. 同或(XNOR)

  • 符号(LaTeX:\odot)或 (LaTeX:\equiv
  • 逻辑定义: 当且仅当两个输入相同时,结果为真(异或的非)。
  • 真值表
ABA⊙B
001
010
100
111

3. 与非(NAND)

  • 符号(LaTeX:\uparrow)或 ¬(A ∧ B)
  • 逻辑定义: 先进行与运算,再取反。
  • 真值表
ABA↑B
001
011
101
110

4. 或非(NOR)

  • 符号(LaTeX:\downarrow)或 ¬(A ∨ B)

  • 逻辑定义: 先进行或运算,再取反。

  • 真值表

    ABA↓B
    001
    010
    100
    110

进制转换详解

以下是常见进制的表达:

进制英文范围前缀后缀
二进制Binary0-10BB
八进制Octal0-70OO
十进制Decimal0-9D
十六进制Hexadecimal0-9,A-F0xH

例如17O表达的是八进制下的数字,(也就是15D或者是15(因为十进制很常见,忽略后缀D的话默认是十进制))

NN进制转换到十进制

将任意进制数转换为十进制的通用方法是:按权展开相加法

操作步骤
  1. 确定进制:明确当前进制数的基数N(如二进制N=2,十六进制N=16)
  2. 分解位权:从右到左为每一位数字标注位权(从0开始递增)
  3. 按权相乘:每一位数字乘以N的位权次方
  4. 求和:将所有乘积相加得到十进制结果
示例说明

二进制转十进制

二进制数:1011.1011B 计算过程:

1011.1011B=1×23+0×22+1×21+1×20+1×2−1+0×2−2+1×2−3+1×2−4=11.68751011.1011B = 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3} + 1 \times 2^{-4} = 11.6875

通解

TT代表进制符号

T进制数:abcd.efghTT进制数:abcd.efghT

abcd.efghT=a×T3+b×T2+c×T+d×T0+e×T−1+f×T−2+g×T−3+h×T−4abcd.efghT= a\times T^3+b\times T^2 + c\times T + d\times T^0 +e\times T^{-1} + f\times T^{-2} +g\times T^{-3} + h\times T^{-4}

更进一步地

对任意T进制数a∗na∗n−1a∗n−2...a0.a∗−1a∗−2a∗−3...a_−mT∣m,n∈NT进制数a*na*{n-1}a*{n-2}...a_0.a*{-1}a*{-2}a*{-3}...a\_{-m}T |{m,n}\in N

转到十进位制为 S=∑_i=−mnai×TiS = \sum\limits\_{i=-m}^n a_i\times T^i

十进制转NN进制

操作步骤
  1. 整数部分:除N取余法
  • 用N除十进制数,记录余数
  • 用商继续除以N,直到商为0
  • 从下往上读取所有余数,得到N进制的整数部分
  1. 小数部分:乘N取整法
  • 小数部分乘以N,取整数部分作为N进制的一位
  • 取小数部分继续乘以N,重复直到小数部分为0或达到所需精度
示例说明

十进制转二进制

整数部分:将25转为二进制

25=2×12+112=2×6+06=2×3+03=2×1+11=2×0+1\begin{align} 25 &= 2 \times 12 + \textcolor{red}{1} \\ 12 &= 2 \times 6 + \textcolor{red}{0} \\ 6 &= 2 \times 3 + \textcolor{red}{0} \\ 3 &= 2 \times 1 + \textcolor{red}{1} \\ 1 &= 2 \times 0 + \textcolor{red}{1} \end{align}

从下往上读:11001B

小数部分:将0.625转为二进制

0.625×2=1.25→10.25×2=0.5→00.5×2=1.0→1\begin{align} 0.625 \times 2 &= 1.25 \rightarrow \textcolor{red}{1} \\ 0.25 \times 2 &= 0.5 \rightarrow \textcolor{red}{0} \\ 0.5 \times 2 &= 1.0 \rightarrow \textcolor{red}{1} \end{align}

从上往下读:.101B

结果:25.625D=11001.101B25.625_D = 11001.101_B

二进制转八进制、十六进制

操作步骤
  1. 将二进制数从小数点处分开,分别处理整数部分和小数部分
  2. 八进制转换:每3位二进制对应1位八进制
  3. 十六进制转换:每4位二进制对应1位十六进制
  4. 如果位数不足,整数部分左侧补0,小数部分右侧补0
示例说明

二进制转八进制

二进制:1011010.101B分组:001∣011∣010.101∣000八进制:132.50结果:132.50O\begin{array}{rcl} \text{二进制:} & 1011010.101_B \\ \text{分组:} & 001|011|010.101|000 \\ \text{八进制:} & 1\quad3\quad2.5\quad0 \\ \text{结果:} & 132.50_O \end{array}

二进制转十六进制

二进制:1011010.101B分组:0101∣1010.1010十六进制:5A.A结果:5A.AH\begin{array}{rcl} \text{二进制:} & 1011010.101_B \\ \text{分组:} & 0101|1010.1010 \\ \text{十六进制:} & 5\quad A.A \\ \text{结果:} & 5A.A_H \end{array}

八进制、十六进制转二进制

操作步骤
  1. 将八进制/十六进制数从小数点处分开
  2. 八进制转换:每1位八进制对应3位二进制
  3. 十六进制转换:每1位十六进制对应4位二进制
示例说明

八进制转二进制

八进制:76.24O转换:7→1116→110.→.2→0104→100结果:111110.010100B\begin{array}{rcl} \text{八进制:} & 76.24_O \\ \text{转换:} & 7 \rightarrow 111 \\ & 6 \rightarrow 110 \\ & . \rightarrow . \\ & 2 \rightarrow 010 \\ & 4 \rightarrow 100 \\ \text{结果:} & 111110.010100_B \end{array}

十六进制转二进制

十六进制:3A.C8H转换:3→0011A→1010.→.C→11008→1000结果:0011 1010.1100 1000B\begin{array}{rcl} \text{十六进制:} & 3A.C8_H \\ \text{转换:} & 3 \rightarrow 0011 \\ & A \rightarrow 1010 \\ & . \rightarrow . \\ & C \rightarrow 1100 \\ & 8 \rightarrow 1000 \\ \text{结果:} & 0011\,1010.1100\,1000_B \end{array}