判定、构造和证明

引子 最近学习近世代数基础时,短短的一章,一共出现了32个定义、10个性质和30个定理。每一个性质和定理都要经过证明,并非一个顺畅的过程,特别是证明庞加莱定理的那个引理的证明,理解起来颇费精力。学习过程中最为愉快的是认识了同构。同构的定义将置换群与抽象群联系在了一起,从而构造同构的方法与构造对称群的 … 继续阅读判定、构造和证明

编译器前端回顾(下)

编译器前端的程序主干是字符串的匹配,可真正的目的是翻译,将源代码转换为目标码。若将匹配流程比作骨架,那么翻译方法就是血肉。设计翻译方法,在于解决三个问题:如何表示源代码中的语义?如何表示目标码?如何将源代码到目标代码的翻译步骤添加到程序的主干流程当中? 语义是藏在文字符号本身之上的一种可被解释与理解 … 继续阅读编译器前端回顾(下)

编译器前端回顾(上)

在设计编译器的前端时,程序驱动的主干是字符串的匹配,所回答的基本问题是输入文本是否能够匹配预定义规则,因而返回值是是或否。 对于回答是的情况,说明输入文本落在了预定义规则划分的范围内。可当规则的描述具有一定规模、较为复杂的时候,又需要知道具体匹配到了哪些规则,这时才会涉及到翻译的问题,常称作语法制导 … 继续阅读编译器前端回顾(上)

滚动硬币的启示

《不要大惊小怪》是本有趣的小册子,引言中的例子就引人深思。题目虽然很容易,但抽取出背后的想问题的动机和方法却需要过去有一定量的实践和反思。 原文的题目问: 有两枚一模一样的硬币,它们半径相等,并排靠在一起,其中一枚固定不动。开始时一枚硬币上的箭头向上,将它沿着另一枚硬币的边缘无滑动地滚动,一直滚到这 … 继续阅读滚动硬币的启示

图灵停机问题的两种符号表述

年中在读《量子计算与量子信息原理》的时候,写了一篇《图灵停机问题的一个简单论述》的阅读笔记,对大学时没学明白的图灵停机问题有了一些基本认识。今天在读《复杂》的时候,里面采用了另外一种等价的说法,在符号形式上看起来略有差异,如今记录一下加深印象。 回顾量子一书中的描述,先假设存在算法A具有判定任意算法 … 继续阅读图灵停机问题的两种符号表述

求数组的子数组之和的最大值

——尾递归的应用 这是《编程之美》中2.14节提出的一个问题,问题的描述为 一个有N个整数元素的一维数组(A[0], A[1], …, A[n-2], A[n-1]),这个数组有很多子数组,那么子数组之和的最大值是什么? 以往遇到这种问题的第一种思维模式也像书中的第一种解法一样去枚举出所 … 继续阅读求数组的子数组之和的最大值

尾递归的启示

——读《计算机程序的构造和解释》第一章第二小节所想 尾递归是指在过程调用中,递归调用过程本身的操作始终是过程的最后一步。举例来讲,计算阶乘的方法,根据定义,直接翻译成递归形式为 def factorial(n): if n == 1: return 1 else: return n * factor … 继续阅读尾递归的启示

图灵停机问题的一个简单论述

图灵停机问题问的是“能否设计一个算法,在判定任意的一段算法对给定的一些输入在有限步骤后停止运算时,返回是,而在判定任意的一段算法对给定的另外一些输入无法在有限步骤后停止运算时,返回否“。图灵的回答是这样的算法无法被设计出来。 问题中所谓的算法等价于图灵机。 假设存在算法A,具备这样的能力。设想对任意 … 继续阅读图灵停机问题的一个简单论述

音和声

老子说“有无相生,难易相成,长短相形,高下相盈,音声相和,前后相随。”意在说明事物中普遍存在的对立统一的辩证关系,朴素确也深刻。这其中有无、难易、长短、高下、前后等五组都容易理解,大概是因为视觉比听觉更让人记忆清楚,容易想象。音和声的对立关系直觉中却难以建立,我想了许久才有些明白。 声音在现代汉语中 … 继续阅读音和声