 MoonBit月兔编程语言 现代编程思想 第五课 数据类型:树、二叉树、二叉搜索树、AVL树现代编程思想 树 Hongbo Zhang 1 数据结构:树 树 ⼆叉树 ⼆叉搜索树 ⼆叉平衡树 2 ⽣活中的树状图 ⽣活中有很多的数据的结构与⼀颗树相似 谱系图(⼜称,家族树) ⽂件结构 数学表达式 …… 3 树的逻辑结构 数据结构中,树是由有限个节点构成的具有层次关系的集合 节点是存储数据的结构,节点之间存在亲⼦关系:⽗节点和⼦节点 如果树不为空,则它拥有⼀个根节点:根节点没有⽗节点 任何节点不能是⾃⼰的后代节点:树中不能有环路 树的⼀条边指的是⼀对节点(u, v),其中u是v的⽗节点或者v是u的⽗节点 4 树的逻辑结构 这不是⼀颗树 5 树的逻辑结构 计算机中的树根节点在上,⼦节点在⽗节点下⽅ 相关术语 节点的深度:根节点下到这个节点的路径的⻓度(边的数量) 根节点深度为0 节点的⾼度:节点下到叶节点的最⻓路径的⻓度 叶节点⾼度为0 树的⾼度:根节点的⾼度 只有⼀个节点的树⾼度为0 空树(没有节点的树)⾼度为-1 也有的定义将树的⾼度等同于最⼤层次,以根为第⼀层 6 树的存储结构 树的存储⽅式有多种(以⼆叉树为例,省略节点存储的数据) 节点与⼦节点关系的列表: [ (0, 1), (0, 2), (1, 3) ] 代数数据结构定义 1. Node(0, 2. Node(1, 3. Leaf(3), 4. Empty)0 码力 | 29 页 | 1015.26 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第五课 数据类型:树、二叉树、二叉搜索树、AVL树现代编程思想 树 Hongbo Zhang 1 数据结构:树 树 ⼆叉树 ⼆叉搜索树 ⼆叉平衡树 2 ⽣活中的树状图 ⽣活中有很多的数据的结构与⼀颗树相似 谱系图(⼜称,家族树) ⽂件结构 数学表达式 …… 3 树的逻辑结构 数据结构中,树是由有限个节点构成的具有层次关系的集合 节点是存储数据的结构,节点之间存在亲⼦关系:⽗节点和⼦节点 如果树不为空,则它拥有⼀个根节点:根节点没有⽗节点 任何节点不能是⾃⼰的后代节点:树中不能有环路 树的⼀条边指的是⼀对节点(u, v),其中u是v的⽗节点或者v是u的⽗节点 4 树的逻辑结构 这不是⼀颗树 5 树的逻辑结构 计算机中的树根节点在上,⼦节点在⽗节点下⽅ 相关术语 节点的深度:根节点下到这个节点的路径的⻓度(边的数量) 根节点深度为0 节点的⾼度:节点下到叶节点的最⻓路径的⻓度 叶节点⾼度为0 树的⾼度:根节点的⾼度 只有⼀个节点的树⾼度为0 空树(没有节点的树)⾼度为-1 也有的定义将树的⾼度等同于最⼤层次,以根为第⼀层 6 树的存储结构 树的存储⽅式有多种(以⼆叉树为例,省略节点存储的数据) 节点与⼦节点关系的列表: [ (0, 1), (0, 2), (1, 3) ] 代数数据结构定义 1. Node(0, 2. Node(1, 3. Leaf(3), 4. Empty)0 码力 | 29 页 | 1015.26 KB | 1 年前3
 Go基础语法宝典用于定义函数和方法 return 用于从函数返回 defer 用于类似析构函数 go 用于并发 select 用于选择不同类型的通讯 interface 用于定义接口 struct 用于定义抽象数据类型 break 、 case 、 continue 、 for 、 fallthrough 、 else 、 if 、 switch 、 goto 、 default 用于流程控制 chan 会产生一个错误:声明了 i 但未使 用。 常量 所谓常量,也就是在程序编译阶段就确定下来的值,而程序在运行时无法改变该值。在Go程序中,常量 可定义为数值、布尔值或字符串等类型。 它的语法如下: 下面是一些常量声明的例子: Go 常量和一般程序语言不同的是,可以指定相当多的小数位数(例如200位),若指定给 float32 自动缩 短为 32bit ,指定给 float64 自动缩短为 com/0voice/Introduction-to-Golang 流程控制 Go中流程控制分三大类:条件判断,循环控制和无条件跳转。 if if 也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件 事。 Go里面 if 条件判断语句中不需要括号,如下代码所示 Go的 if 还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条0 码力 | 47 页 | 1020.34 KB | 1 年前3 Go基础语法宝典用于定义函数和方法 return 用于从函数返回 defer 用于类似析构函数 go 用于并发 select 用于选择不同类型的通讯 interface 用于定义接口 struct 用于定义抽象数据类型 break 、 case 、 continue 、 for 、 fallthrough 、 else 、 if 、 switch 、 goto 、 default 用于流程控制 chan 会产生一个错误:声明了 i 但未使 用。 常量 所谓常量,也就是在程序编译阶段就确定下来的值,而程序在运行时无法改变该值。在Go程序中,常量 可定义为数值、布尔值或字符串等类型。 它的语法如下: 下面是一些常量声明的例子: Go 常量和一般程序语言不同的是,可以指定相当多的小数位数(例如200位),若指定给 float32 自动缩 短为 32bit ,指定给 float64 自动缩短为 com/0voice/Introduction-to-Golang 流程控制 Go中流程控制分三大类:条件判断,循环控制和无条件跳转。 if if 也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件 事。 Go里面 if 条件判断语句中不需要括号,如下代码所示 Go的 if 还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条0 码力 | 47 页 | 1020.34 KB | 1 年前3
 机器学习课程-温州大学-07机器学习-决策树1 2023年06月 机器学习-决策树 黄海广 副教授 2 本章目录 01 决策树原理 02 ID3算法 03 C4.5算法 04 CART算法 3 1.决策树原理 01 决策树原理 02 ID3算法 03 C4.5算法 04 CART算法 4 长相 能 帅 不帅 家庭背景 好 能 不好 人品 好 上进心 能 不能 有 有 无 不能 不好 1.决策树原理 ⚫ 决策树:从训练数据中学习得出一个树状 结构的模型。 ⚫ 决策树属于判别模型。 ⚫ 决策树是一种树状结构,通过做出一系列 决策(选择)来对数据进行划分,这类似 于针对一系列问题进行选择。 ⚫ 决策树的决策过程就是从根节点开始,测 试待分类项中对应的特征属性,并按照其 值选择输出分支,直到叶子节点,将叶子 节点的存放的类别作为决策结果。 node) 5 1.决策树原理 根节点 (root node) 非叶子节点 (non-leaf node) (代表测试条件,对数据属性的测试) 分支 (branches) (代表测试结果) 叶节点 (leaf node) (代表分类后所获得的分类标记) ⚫ 决策树算法是一种归纳分类算法 ,它通过对训练集的学习,挖掘 出有用的规则,用于对新数据进 行预测。 ⚫ 决策树算法属于监督学习方法。0 码力 | 39 页 | 1.84 MB | 1 年前3 机器学习课程-温州大学-07机器学习-决策树1 2023年06月 机器学习-决策树 黄海广 副教授 2 本章目录 01 决策树原理 02 ID3算法 03 C4.5算法 04 CART算法 3 1.决策树原理 01 决策树原理 02 ID3算法 03 C4.5算法 04 CART算法 4 长相 能 帅 不帅 家庭背景 好 能 不好 人品 好 上进心 能 不能 有 有 无 不能 不好 1.决策树原理 ⚫ 决策树:从训练数据中学习得出一个树状 结构的模型。 ⚫ 决策树属于判别模型。 ⚫ 决策树是一种树状结构,通过做出一系列 决策(选择)来对数据进行划分,这类似 于针对一系列问题进行选择。 ⚫ 决策树的决策过程就是从根节点开始,测 试待分类项中对应的特征属性,并按照其 值选择输出分支,直到叶子节点,将叶子 节点的存放的类别作为决策结果。 node) 5 1.决策树原理 根节点 (root node) 非叶子节点 (non-leaf node) (代表测试条件,对数据属性的测试) 分支 (branches) (代表测试结果) 叶节点 (leaf node) (代表分类后所获得的分类标记) ⚫ 决策树算法是一种归纳分类算法 ,它通过对训练集的学习,挖掘 出有用的规则,用于对新数据进 行预测。 ⚫ 决策树算法属于监督学习方法。0 码力 | 39 页 | 1.84 MB | 1 年前3
 李欣宜 扩展Python的语法和语义Python的语法扩展系统 Moshmosh Thautwarm&李欣宜 The awareness of low-level implementation details brings the appreciation of an abstraction and the intuitive explanation for it. — Oleg Kiselyov Kiselyov 目录 CONTENTS 提供语法和语义的语言不仅仅是工具, 还是思维方式 表达能力的极限,由内破除, 还是从外破除? Moshmosh: 我的Python不可能这么甜美清新 下班时在干什么?有没有空?可以来contribute吗? 1 提供语法和语义的语言 不仅仅是工具, 还是思维方式 “语言只是工具”是现代社会最为荒谬的说法之一。 即便存在海量的常见任务,他们在部分语言里很容 人们不得不成规模地重复工作,或是任由冗余在codebase里猖獗; 抛弃更深远的抽象和语义,最终代码的编写成为了让人烦恼的苦力。 Python是有极限的!我不写Python了! 摆 脱 编 程 语 言 给 你 的 限 制 ? 我们不继续谈语言和思维的问题了,也不谈一些高级的特性是多么 make sense却没有支持。 就说Python。Python是有极限的,只从语义语法上讲。 和性能、GIL相关的问题我们放在一边。0 码力 | 39 页 | 3.69 MB | 1 年前3 李欣宜 扩展Python的语法和语义Python的语法扩展系统 Moshmosh Thautwarm&李欣宜 The awareness of low-level implementation details brings the appreciation of an abstraction and the intuitive explanation for it. — Oleg Kiselyov Kiselyov 目录 CONTENTS 提供语法和语义的语言不仅仅是工具, 还是思维方式 表达能力的极限,由内破除, 还是从外破除? Moshmosh: 我的Python不可能这么甜美清新 下班时在干什么?有没有空?可以来contribute吗? 1 提供语法和语义的语言 不仅仅是工具, 还是思维方式 “语言只是工具”是现代社会最为荒谬的说法之一。 即便存在海量的常见任务,他们在部分语言里很容 人们不得不成规模地重复工作,或是任由冗余在codebase里猖獗; 抛弃更深远的抽象和语义,最终代码的编写成为了让人烦恼的苦力。 Python是有极限的!我不写Python了! 摆 脱 编 程 语 言 给 你 的 限 制 ? 我们不继续谈语言和思维的问题了,也不谈一些高级的特性是多么 make sense却没有支持。 就说Python。Python是有极限的,只从语义语法上讲。 和性能、GIL相关的问题我们放在一边。0 码力 | 39 页 | 3.69 MB | 1 年前3
 [试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础第 2 章 ECMAScript语法基础 从本章开始,我们将循序渐进地介绍 JavaScript 的核心内容。首先,本章就是对 ECMAScript 语法进行全面的、系统的和详尽的介绍。这里读者可能会有疑问,为什么是 ECMAScript 语法 而不是 JavaScript 语法呢? 其实,在第 1 章关于 JavaScript 组成的介绍中,我们就知道 JavaScript 国际的标准规范(ECMA-262),ECMAScript 描述了 JavaScript 脚本语言的 语法和基本对象。因此,本书从严谨的角度出发,这里使用 ECMAScript 语法基础作为本章标 题。不过,绝大多数的设计人员还是不区分 JavaScript 与 ECMAScript 的,更习惯用 JavaScript 语法的称谓。 2.1 ECMAScript 基础 在第 1 章中,我们了解到 JavaScript JavaScript 起初就 是模仿 Java 而开发出来的。如果读者熟悉 Java 语言,就会发现 ECMAScript 语法很容易掌握, 因其主要就是借用了 Java 语言的语法。当然,JavaScript 与 Java 毕竟是两种功能作用不同的编 程语言,ECMAScript 还有一些特殊的语法特性。 2.1.1 ECMAScript 语句 相信读者在学习人生中的第一门编程语言(比如 C 语言、Java0 码力 | 52 页 | 3.83 MB | 1 年前3 [试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础第 2 章 ECMAScript语法基础 从本章开始,我们将循序渐进地介绍 JavaScript 的核心内容。首先,本章就是对 ECMAScript 语法进行全面的、系统的和详尽的介绍。这里读者可能会有疑问,为什么是 ECMAScript 语法 而不是 JavaScript 语法呢? 其实,在第 1 章关于 JavaScript 组成的介绍中,我们就知道 JavaScript 国际的标准规范(ECMA-262),ECMAScript 描述了 JavaScript 脚本语言的 语法和基本对象。因此,本书从严谨的角度出发,这里使用 ECMAScript 语法基础作为本章标 题。不过,绝大多数的设计人员还是不区分 JavaScript 与 ECMAScript 的,更习惯用 JavaScript 语法的称谓。 2.1 ECMAScript 基础 在第 1 章中,我们了解到 JavaScript JavaScript 起初就 是模仿 Java 而开发出来的。如果读者熟悉 Java 语言,就会发现 ECMAScript 语法很容易掌握, 因其主要就是借用了 Java 语言的语法。当然,JavaScript 与 Java 毕竟是两种功能作用不同的编 程语言,ECMAScript 还有一些特殊的语法特性。 2.1.1 ECMAScript 语句 相信读者在学习人生中的第一门编程语言(比如 C 语言、Java0 码力 | 52 页 | 3.83 MB | 1 年前3
 06 PHP基本语法 — 条件、循环、函数  杨亮 《PHP语⾔程序设计》PHP基本语法 —条件、循环、函数 杨亮 程序的基本结构 输⼊入 输出 程序 运算(+ - x / & | ! …) 逻辑(条件、循环、递归) 辅助(变量、数组、函数) ⼩小测验 ⽤用你熟悉的程序找出 1~1000中的所有质数 我们直接看代码好了 10 码力 | 25 页 | 1.30 MB | 1 年前3 06 PHP基本语法 — 条件、循环、函数  杨亮 《PHP语⾔程序设计》PHP基本语法 —条件、循环、函数 杨亮 程序的基本结构 输⼊入 输出 程序 运算(+ - x / & | ! …) 逻辑(条件、循环、递归) 辅助(变量、数组、函数) ⼩小测验 ⽤用你熟悉的程序找出 1~1000中的所有质数 我们直接看代码好了 10 码力 | 25 页 | 1.30 MB | 1 年前3 4 Python语法扩展框架Moshmosh和其上的CPython compatible JIT实现 thautwarmend *抽象指令 (没有实际指令) Julia“生成函数” Python 字节码 JuVM虚拟栈机 (具体指令集) 抽象机器 (只规定语义) JuVM栈机指令 Python JIT 函数包装 Julia AST/CodeInfo (一个)实例化/后端 代码生成 PyCall.jl 自动得到 运行时处理技巧 抽象解释 抽象机器 抽象Intrinsics 抽象解释 抽象解释 抽象解释 抽象解释 Instructions for Julia Back End Instructions for Julia Back End JuVM: An implementation of our AM Machine Runner: 从AM到VM Julia Code Generation Julia Type Level Encoding 和Python不一样, Julia在运行时不能随意地eval。0 码力 | 30 页 | 8.04 MB | 1 年前3 4 Python语法扩展框架Moshmosh和其上的CPython compatible JIT实现 thautwarmend *抽象指令 (没有实际指令) Julia“生成函数” Python 字节码 JuVM虚拟栈机 (具体指令集) 抽象机器 (只规定语义) JuVM栈机指令 Python JIT 函数包装 Julia AST/CodeInfo (一个)实例化/后端 代码生成 PyCall.jl 自动得到 运行时处理技巧 抽象解释 抽象机器 抽象Intrinsics 抽象解释 抽象解释 抽象解释 抽象解释 Instructions for Julia Back End Instructions for Julia Back End JuVM: An implementation of our AM Machine Runner: 从AM到VM Julia Code Generation Julia Type Level Encoding 和Python不一样, Julia在运行时不能随意地eval。0 码力 | 30 页 | 8.04 MB | 1 年前3 05 PHP基本语法 - 变量、数组、字符串 杨亮 《PHP语⾔程序设计》0 码力 | 25 页 | 587.00 KB | 1 年前3 05 PHP基本语法 - 变量、数组、字符串 杨亮 《PHP语⾔程序设计》0 码力 | 25 页 | 587.00 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final现代编程思想 案例:语法解析器 Hongbo Zhang 1 语法解析器 案例⽬标 解析基于⾃然数的数学表达式: "(1+ 5) * 7 / 2" 转化为单词列表 LParen Value(1) Plus Value(5) Multiply Value(7) Divide Value(2) 转化为抽象语法树 Division(Multiply(Add(Value(1), Value(5)) Value(5)), Value(7)), Value(2)) 计算最终结果:21 语法分析 对输⼊⽂本进⾏分析并确定其语法结构 通常包含词法分析和语法分析 本节课均利⽤语法解析器组合⼦(parser combinator)为例 2 词法分析 将输⼊分割为单词 输⼊:字符串/字节块 输出:单词流 例如: "12 +678" -> [ Value(12), Plus, Value(678) ( 5) ) ")) 8. } 我们成功地分割了字符串 - 10123 - + - 523 103 ( 5 ) ) 但这不符合数学表达式的语法 13 语法分析 对单词流进⾏分析,判断是否符合语法 输⼊:单词流 输出:抽象语法树 1. expression = Value / "(" expression ")" 2. expression =/ expression "+"0 码力 | 25 页 | 400.29 KB | 1 年前3 MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final现代编程思想 案例:语法解析器 Hongbo Zhang 1 语法解析器 案例⽬标 解析基于⾃然数的数学表达式: "(1+ 5) * 7 / 2" 转化为单词列表 LParen Value(1) Plus Value(5) Multiply Value(7) Divide Value(2) 转化为抽象语法树 Division(Multiply(Add(Value(1), Value(5)) Value(5)), Value(7)), Value(2)) 计算最终结果:21 语法分析 对输⼊⽂本进⾏分析并确定其语法结构 通常包含词法分析和语法分析 本节课均利⽤语法解析器组合⼦(parser combinator)为例 2 词法分析 将输⼊分割为单词 输⼊:字符串/字节块 输出:单词流 例如: "12 +678" -> [ Value(12), Plus, Value(678) ( 5) ) ")) 8. } 我们成功地分割了字符串 - 10123 - + - 523 103 ( 5 ) ) 但这不符合数学表达式的语法 13 语法分析 对单词流进⾏分析,判断是否符合语法 输⼊:单词流 输出:抽象语法树 1. expression = Value / "(" expression ")" 2. expression =/ expression "+"0 码力 | 25 页 | 400.29 KB | 1 年前3 3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 语言决定思维模型 在 实 际 业 务 中 处 理 数 据 � Python 语言决定思维模型 语言中的语法和语义, 决定了 它真实的表达力。 大多数语言都不是“万金油” 的,这是客观事实。 但它们不够“万金油”的问题 来源,不一定是不能解决的。 扩展语言,开阔思维 我预期的语法(及语义) 扩展系统: 1. 首行用moshmosh? 标志模块 2. +extension名 (extension参数)开 只对源代码Loader 重写get_data方法 调用父get_data方法, 拿到源代码 moshmosh.extension. perform_extension 源码变换 扩展的语法和语义 并非naïve的,不卫生的 源码变换; 其作用是对 AST实现一层quote moshmosh/extension_register.py (只有45行) 科普: Python Import机制是怎样的?0 码力 | 43 页 | 10.71 MB | 1 年前3 3 Thautwarm 解放python的表达力 性能和安全性 语法和语义扩展 JIT 静态检查解放Python的 表达力,性能和安全性 Thautwarm 目录 CONTENTS 语法和语义扩展 JIT 静态类型 语法和语义扩展 表达力的扩展, 可用性的保留,白来的午餐? 演示一小部分: 模式匹配, Quick Lambda, Pipe运算 语言决定思维模型 GNU-APL C++ Haskell 说 到 质 数 � 人 们 想 到 什 么 � 语言决定思维模型 语言决定思维模型 在 实 际 业 务 中 处 理 数 据 � Python 语言决定思维模型 语言中的语法和语义, 决定了 它真实的表达力。 大多数语言都不是“万金油” 的,这是客观事实。 但它们不够“万金油”的问题 来源,不一定是不能解决的。 扩展语言,开阔思维 我预期的语法(及语义) 扩展系统: 1. 首行用moshmosh? 标志模块 2. +extension名 (extension参数)开 只对源代码Loader 重写get_data方法 调用父get_data方法, 拿到源代码 moshmosh.extension. perform_extension 源码变换 扩展的语法和语义 并非naïve的,不卫生的 源码变换; 其作用是对 AST实现一层quote moshmosh/extension_register.py (只有45行) 科普: Python Import机制是怎样的?0 码力 | 43 页 | 10.71 MB | 1 年前3
共 878 条
- 1
- 2
- 3
- 4
- 5
- 6
- 88














 
  
 