数据结构之数学基础(一)

前言

前面给大家提到了有这么一种排序算法既能加快速度也能节约内存,但是呢,这种算法要真正去理解透彻却不是那么容易,这里就需要用到一种数学思维--递归。那么这一篇是讲递归吗,恐怕让大家失望了,因为要想真正去理解递归这个概念也是有点难度的,有的人说递归很简单啊,我平时写一些程序也用到了,可是呢,话不要说太早,你可以看看后面我将写的递归系列再说,既然是系列,姑且打算写四篇关于递归的,下个星期会将递归和那个高效的排序算法一并给出。这一篇将给大家介绍的是一种数学方法--数学归纳法。这个大家应该挺熟悉吧,毕竟高考大题就需要它。这也间接说明了一点,想学好编程,数学也不能太差哦。

正文

言归正传,首先呢给大家介绍一下什么是数学归纳法,用通俗的话讲呢,数学归纳法就是通过特殊的情况推导出一般情况的结果。举个例子:我们都知道 4 > 3 ,这可以理解为 3+1 > 3。那么通过这样一个特殊的情况我们可以推导出,对于给定的任意一个数 n , n+1 > n 成立。

有的人可能会说这不是显而易见的吗,还需要推导吗。那么仔细想一下我们对于这些显而易见的结果其实也有自己的思考,首先你是根据了一个给定的结果,进而去得出了一般的结论。只是很多情况下我们忽略了推导的过程罢了。根据这个例子,想必大家对于数学归纳法有了比较清晰的认识了,就是把很多我们觉得理所当然的结论用比较规范的语言去表达出来。下面给出数学归纳法的规范表达。


步骤一:
    证明 “ P(0) 成立 ” //也就是我们上面说的 4 > 3 成立

步骤二:
    证明 “ 无论 k 为 0 以上的哪个整数,若 p(k) 成立,则 P(k+1) 也成立 ”

对于这个过程有点人可能要问,我们需要证明的就是 P(k) 成立,假设它成立了,那我们还怎么证明呢。这里就是陷入了一个误区了,这就可以比喻成程序中的局部变量和全局变量了。比如我们有一个局部变量 k ,和一个全局变量 k ,我们应该知道在一个函数块内局部变量是优先调用的,通过局部变量我们定义函数再通过这个函数去求得全局变量需要求出的值,这不是和数学归纳法有些相似吗。

下面给出一个数学例子再次熟悉一下数学归纳法的使用

请证明以下断言 Q(n) 对于 1 以上的所有整数 n 都成立。

断言 Q(n) : 1 + 3 + 5 + 7 + ··· + (2 x n-1) = n2

根据我们上面的归纳,第一步先证明 Q(0) 成立,当然这里第一项为 1,所以先证明 Q(1)

Q(1) = 1 = 12

第二步,假设 Q(k) 成立,即

Q(k) = 1 + 3 + 5 + 7 + ··· + (2 x k-1) = k2

Q(k+1)

= 1 + 3 + 5 + 7 + ··· + (2 x k-1) + (2 x (k-1) -1)

= Q(k) + (2 x (k-1) -1)

= k2 + (2 x (k-1) -1)

= k2 + 2 x k + 1

= (k+1)2

由此可得 Q(n) 成立。

经过这一个例子,我想对于数学归纳法应该有了基本的了解了。既然是计算机专业的学生,我想与编程打交道是不可避免的下面让我们用程序来进一步了解吧。当然这里还是用 C 语言。


#include<stdio.h>

void prove(int n);

int main()
{
    int n = 10;//因为程序的限制,只是给定一个具体数据。
    prove(10); 
    getchar();
    return 0; 
}

void prove(int n)
{
   int k;
   
   printf("现在开始证明 P(%d) 成立。\n",n);
   k = 0;   
   printf("根据步骤 1 得出 P(%d) 成立。\n",k);
   while(k < n)
   {
        printf("根据步骤 2 可以说 “若 P(%d) 成立,则 P(%d) 也成立”。\n",k,k+1);
        printf("因此可以说 “P(%d) 是成立的”。\n",k+1);
        k = k + 1; 
    } 
   printf("证明结束。\n");
}


运行结果

通过这个简单程序,我想大家应该理解的更深刻一点了吧。

最后说一点,个人认为递归其实是跟数学归纳法有些相似的,都是把复杂的问题简单化了,只不过递归是由多变少,数学归纳法由少变多罢了。下个星期正式步入递归,让我们一起期待这种神奇的数学方法吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,663评论 0 33
  • 算法和数据结构 [TOC] 算法 函数的增长 渐近记号 用来描述算法渐近运行时间的记号,根据定义域为自然数集$N=...
    wxainn阅读 1,035评论 0 0
  • 紫煊: 我亲爱的宝贝!妈妈为你的快乐点赞! 我们仨本打算去妙峰山爬山,盘山路一直很堵,你晕车不舒服。我...
    窚煊阅读 124评论 0 1
  • 我的世界很小,却很美好! 似乎从小到大都生活在自己的世界里,每天都按照自己的期望进行着,很少有忧虑...
    要逆袭的苏小小阅读 194评论 0 0
  • 日记坚持第三天。 12月就快过半了,还是什么事都没有做。 今天并没有实施昨天所说的一日计划和小时记录。早上就混过去...
    小王的小桌子阅读 176评论 0 0