- 博客(17)
- 收藏
- 关注
原创 分治法的几种写法(以归并排序为例)
递归函数式优点:便与描述和分析算法,代码简洁清晰,且具有一般性(*以SML语言为例*)fun mergeSort(L:int list) = let (L, R) = splitMid(L) (L', R') = (mergeSort(L) || mergeSort(R)) in merge(L', R') end说明:一般性:这里虽然使用 list 但实际上可以...
2020-02-16 15:16:26
340
原创 C语言快速实现优先队列(排雷)
写在前面C语言没有自带常用数据结构的库,所以当需要使用它们处理问题时必须自己实现它们。解题时快速并正确实现数据结构的ADT可以为我们节省宝贵的时间去解决真正的问题。本博客本更像是个人的排坑排雷笔记,讲解不全请见谅,但如果对你有一点启发那就再好不过了。优先队列为了简单起见,存放数据的结构使用数组。组织序号我们知道优先队列,也叫大(小)顶堆(默认为二叉堆)。堆是一棵完全二叉树,但实...
2020-02-16 00:31:47
659
原创 括号生成(时间复杂度篇)
写在前面算法的实现(代码)以及算法的正确性(和所需的理论知识)已经在括号生成(理论及实现篇)写到,如果你没有看过请先大略浏览一遍,以防直接阅读本篇造成的无上下文的体验。LeetCode官方题解对这两种算法的分析不仅有些简略而且不太严谨。现在以上一篇为基础,对闭合数和回溯法做算法复杂度分析。Cn=C0Cn−1+C1Cn−2+⋯+Cn−1C0,n≥1(**)C_n=C_0C_{n-1}+C...
2020-02-14 16:30:17
881
原创 括号生成(结合Catalan数详细分析)
题目给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]PS:本题源自[leetcode 22]理论基础(Catalan数,卡特兰数)Catalan数列是序列C0,C1,C2,…Cn,…C_0, C_1...
2020-02-13 19:26:00
850
原创 正则表达式匹配(问题实质探讨)
题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持'.'和'*'的正则表达式匹配。 '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z的小写字母,以及字符.和*。本质探讨及问题分析写在前面如果你觉得,“这题还要动态规划...
2020-02-10 19:51:44
256
原创 Braun Tree及相关操作(ML 实现)
Braun Tree基本定义这里仅给出Binary Braun Tree定义(多叉树理论上可以此类推,emm):一个二叉树是Braun Tree当且仅当它满足以下性质它是空树或者它的左子树和右子树均为Braun Tree左右子树节点数Nl,NrN_l,N_rNl,Nr(简记为∣L∣,∣R∣|L|,|R|∣L∣,∣R∣)满足∣R∣≤∣L∣≤∣R∣+1|R|\le |L|\le |R...
2019-12-24 22:16:56
290
原创 欧拉函数的Möbius反演公式证明中换序求和一些想法
定义NNN上的函数f(n),g(n)f(n),g(n)f(n),g(n)满足f(n)=∑d∣ng(d)(1.1)f(n)=\sum\limits_{d|n}g(d)\tag{1.1}f(n)=d∣n∑g(d)(1.1)那么ggg满足g(n)=∑d∣nμ(nd)f(d)(1.2)g(n)=\sum\limits_{d|n}\mu(\frac n d)f(d)\tag{1.2}g(n)=d∣n...
2019-11-23 00:44:33
303
原创 Skyline Problem及算法分析
定义1critical point,即关键点,记作cp。对于一个矩形[l,h,r][l, h, r][l,h,r],它有两个cpcpcp分别为(l,h)(l, h)(l,h)和(r,0)(r,0)(r,0)critical point sequence,即关键点序列,记作cp seq(下同),它是刻画building的skyline的一个最小sequence...
2019-11-18 18:44:32
1628
1
原创 sml基本语法(五)——异常
异常机制、目的以及思想和其他语言(如Java)中的异常几乎没有什么不同,所以我们重点关注异常在ML语言中的语法特性。本质:ML语言中的内置类型exn(关于数据类型详见(四)数据类型)特性:exn类型的构造子集合可以通过声明语句被扩展声明 exceptionexceptionexception expnexpnexpn,其中exception为ML关键字,expn为异常的名字(名...
2019-11-04 21:52:13
1159
原创 sml基本语法(三)——函数
语法原型(数学中)通常表示函数,是(on the real line)f(x)=x2+2x+1f(x) = x^2+2x+1f(x)=x2+2x+1数学中,函数还有其他表示方法f:R→R:x∈R↦x2+2x+1f: R\to R:x \in R \mapsto x^2+2x+1f:R→R:x∈R↦x2+2x+1ML语言中的函数正是这种表示方式,它表明fff是R→RR \to RR→R(定...
2019-09-10 22:47:16
3654
6
原创 sml基本语法(二)
变量、类型、作用域变量类型作用域 ML语言的作用域是静态的、词法的(static, lexical),与C语言类似。声明的变量、类型的作用域具有全局的作用域(global scope),即剩下的代码块都是它的作用域,详细的动态作用域(Dynamic Scope)和静态作用域的区别讲解见链接PS:ML也支持限制地声变量和类型,即限制它们的作用域——letletlet语句绑定(Bin...
2019-09-10 00:09:52
3353
原创 sml基本语法(一)
注释(* *)(不是单行注释// 或 块注释/* */)运算一元操作符没有+和-,表示负数应该使用~,eg:~6表示-6除法div(不是/),取余(模)mod(不是%)函数运用比中缀运算符优先级更高函数的形参列表可以不用括号"()"括住,如下area (1.0);area 1.0 //二者等价PS: area a + b 等价于 (area a) + b 但不等价于 a...
2019-09-07 23:49:28
6869
原创 smlnj的基本使用
一、启动与结束启动:命令行(windows下cmd或powershell)输入sml启动交互式系统(interactive system)退出:Windows下control-Z(unix下control-D)结束交互式系统,需按下Enter,有无";"均可PS:control-C为Interrupt操作符,直接将输入行切回top level,无需回车二、运行说明"-" 顶级提示...
2019-09-07 21:45:42
2623
原创 并行算法中的Work and Span
定义primitive operations: 基本运算,即任何一步小操作,可以是加、减,每一步运算消耗单位时间(unit time)time steps: 每个time step中可并行地执行多个primitive operations,每个time step所耗费是时长为单位时间Tp: 从计算开始到结束所花的总时间,包括计算和等待时间Work: 针对primitive operati...
2019-09-03 23:56:06
1722
原创 Dev调试正常通过编译运行有误(一种情况)
最初由如下错误引发:for(i = 0;i < N;i ++) scanf("%c %c %c", (p++)->data, (p++)->leftnum, (p++)->rightnum);很明显p++多次重复,这与想表达每读取并存储完一个节点的数据后让p指向下一个节点的意思违背。奇怪的是,*dev的调试过程中查看p所指的内容不正常但输出数据却是正常的,*完全按照所...
2019-04-11 20:45:24
1912
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人