——尾递归的应用 这是《编程之美》中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 … 继续阅读尾递归的启示
How to Write Unit Tests
This is not an article that guides you to setup a concrete unit test example. It is about discussing the basic principles, including the motivation of … 继续阅读How to Write Unit Tests
图灵停机问题的一个简单论述
图灵停机问题问的是“能否设计一个算法,在判定任意的一段算法对给定的一些输入在有限步骤后停止运算时,返回是,而在判定任意的一段算法对给定的另外一些输入无法在有限步骤后停止运算时,返回否“。图灵的回答是这样的算法无法被设计出来。 问题中所谓的算法等价于图灵机。 假设存在算法A,具备这样的能力。设想对任意 … 继续阅读图灵停机问题的一个简单论述
三角形周长
有\(n\)根棍子,棍子\(i\)的长度为\(a_i\)。想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大周长的三根棍子,若无法组成三角形则输出空字符串。 限制条件 \(3\le n\le 100\) \(1\le a_i\le 10^6\) 例如,输入: 2,3,4,5,10 输出: 3, … 继续阅读三角形周长
像素密度和设备像素比
像素密度和设备像素比的概念事实上比想象中的复杂,希望这篇文章能够消除开发者和设计师们的疑虑和错误认知 显示器上常用的长度单位是像素(pixel),比如说一台显示器的分辨率是1280×800像素,一张照片的大小是1050×1500像素,一台照相机有300万像素。像素和物理上的长度单位不是等价的。物理上 … 继续阅读像素密度和设备像素比
火车窗外
每次坐火车时,总爱看窗外的风景。近处的树木看起来总比远处的高楼运动得快,令人眼花撩乱。细想来,以火车为参考系,不论近处的树木还是远处的高楼都以相同的速率向着火车运动的反方向运动,所以不应该是速率的变化造成的视觉差异,而应该是角度的变化率(即角速度)的不同造成的。 假设初始零时刻,火车以速度\(v\) … 继续阅读火车窗外
两个物体的简谐振动
两个质量均为\(m\)的小车被长度为\(l\)的无形变的弹簧连在一起,放在光滑的水平面上,弹簧质量不计。初始时刻给左侧的小车一个\(v_0\)的初速度,求每个小车的运动方程。根据动能守恒得 $$m\dot{x}+m\dot{y}=mv_0$$ 根据能量守恒得 $$\frac{1}{2}m\dot{x … 继续阅读两个物体的简谐振动
公开密钥加密在SSH远程登录中的应用
一直以来,都在享受着SSH免密码登录的远端服务器的好处,但总觉得对背后的逻辑不是太清楚,或者说,根本没有细想过,因为网上充斥了大量的,如何做,却不告诉为什么,下一次再去做的时候,又费半天功夫,所以有必要熟悉完整的流程。近来有了“深入理解加密、解密、数字签名和数字证书”这篇文章做底子,SSH免密码登录 … 继续阅读公开密钥加密在SSH远程登录中的应用
数字签名在安卓包发布中的应用
安卓包发布前必须要有正式签名才能在应用商店发布,对照公开密钥基础设施的常规流程而言,安卓包签名仅是个子集,只有数字签名,不涉及加密。 数字签名中核心的要素是私有密钥、公钥证书、原始摘要和签名摘要。涉及的参与者有应用开发者、应用商店和用户(操作系统)。逐一了解了每个核心要素和参与者也就清楚了整个签名的 … 继续阅读数字签名在安卓包发布中的应用