《趣题学算法》—第0章0.1节App程序与算法

第0章 从这里开始
趣题学算法
0.1 App程序与算法

0.2 计算问题

0.3 算法的伪代码描述

0.4 算法的正确性

0.5 算法分析

0.6 算法运行时间的渐近表示

0.7 算法的程序实现

0.8 从这里开始

0.1 App程序与算法
信息时代,人们时刻都在利用各种App解决生活、工作中的问题,或获取各种服务。早晨,手机里设定的闹钟铃声(或你喜欢的音乐)将你唤醒。来到餐厅,你用手中的IC卡到取餐处的刷卡机上支付美味早餐的费用。上班途中,打开手机上的音乐播放器,用美妙的乐声,打发掉挤在公交车上的乏味的时间。上班时,利用计算机中的各种办公软件处理繁忙的业务。闲暇时,你用平板电脑里的视频程序看一部热映的大片,或在淘宝网上选购你喜欢的宝贝。晚间,你用QQ或Facetime与远方的朋友聊天、交流情感……凡此种种,不一而是。

五彩缤纷的App后面是什么?这些神奇的体验是怎么创造出来的?如果你对这样的问题感兴趣的话,我们就成为朋友了。从这里开始,我们将探索创造App——计算机(及网络)应用程序的基本原理和基本技能。
其实,能用计算机(包括各种平板电脑、智能手机)解决的是所谓的“计算问题”,也就是有明确的输入与输出数据的问题。解决计算问题就是用一系列基本的数据操作(算术运算、逻辑运算、数据存储等)将输入数据转换成正确的输出数据。能达到这一目标的操作序列称为解决这一计算问题的“算法”。App就是在一定的计算机平台(计算机设备及其配备的操作系统)上,用这个计算机系统能识别的语言来实现算法的程序。

因此,对上述的第一个问题,我们的答案是:App背后的是算法。算法是解决计算问题的方案。要用计算机来解决应用问题,首先要能将该问题描述成计算问题——即明确该问题的输入与输出数据。只有正确、明白地描述出计算问题,才有可能给出解决该问题的算法。作为起点,本书并不着眼于如何将一个实际的应用形式化地描述为一个计算问题,而是向你描述一些有趣的计算问题,并研究、讨论如何正确、有效地解决这些问题。通过对这些问题的解决,使我们对日常面对的那些App有着更清醒、更理智的认识。可能的话,也许哪一天你也能为你自己,或者朋友、爱人创造出你和他们喜欢的App。

时间: 2025-01-25 08:32:05

《趣题学算法》—第0章0.1节App程序与算法的相关文章

《趣题学算法》目录—导读

版权 趣题学算法 • 著 徐子珊 责任编辑 张 涛 • 人民邮电出版社出版发行 北京市丰台区成寿寺路11号 邮编 100164 电子邮件 315@ptpress.com.cn 网址 http://www.ptpress.com.cn • 读者服务热线:(010)81055410 反盗版热线:(010)81055315 内容提要 趣题学算法 本书共分10章.第0章讲解了算法的概念及体例说明.第1-7章分别就计数问题.信息查找问题.组合优化问题.图中搜索问题和数论问题展开,讨论了算法的构思和设计,详

《趣题学算法》—第1章1.1节累积计数法

第1章 计数问题 趣题学算法 1.1 累积计数法 1.2 简单的数学计算 1.3 加法原理和乘法原理 1.4 图的性质 1.5 置换与轮换 人类的智力启蒙发端于计数.原始人在狩猎过程中为计数猎获物,手指.结绳等都是曾经使用过的计数工具.今天,我们所面对.思考的问题更加复杂.庞大,计数的任务需要强大的计算机来帮助我们完成.事实上,很多计算问题本身就是计数问题. 1.1 累积计数法 这样的问题在实际中往往要通过几个步骤来解决,每个步骤都会产生部分数据,问题的目标是计算出所有步骤产生数据的总和.对这样

《趣题学算法》—第0章0.7节算法的程序实现

0.7 算法的程序实现 有了解决问题的正确算法,就可以利用一种计算机程序设计语言将算法实现为可在计算机上运行的程序.本书选用业界使用最广泛.最成熟的C++语言来实现解决每一个问题的算法.C++语言是面向对象的程序设计语言,它为程序员提供了一个庞大的标准库.有趣的是,C++脱胎于C语言.所以,读者若具有C语言某种程度的训练,对于理解本书提供的C++代码一定是大有裨益的.闲话少说,让我们先来一睹C++语言程序的"芳容"吧. 解决问题0-1"计算逆序数"的C++程序如下.

《趣题学算法》—第0章0.3节算法的伪代码描述

0.3 算法的伪代码描述 上一节最后一段使用自然语言(汉语)描述了解决"计算逆序数"问题的算法.即如何将输入数据转换为输出数据的过程.在需要解决的问题很简单的情况下(例如"计算逆序数"问题),用自然语言描述解决这个问题的算法是不错的选择.但是,自然语言有一个重要特色--语义二岐性.语义二岐性在文学艺术方面有着非凡的作用:正话反说.双关语--.由此引起的误会.感情冲突--带给我们多少故事.小说.戏剧--.但是,在算法描述方面,语义二岐性却是我们必须避免的.因为,如果对

《趣题学算法》—第0章0.6节算法运行时间的渐近表示

0.6 算法运行时间的渐近表示由于计算机技术不断地扩张其应用领域,所要解决的问题输入规模也越来越大,所以对固定的n来计算T(n)的意义并不大,我们更倾向于评估当n→∞时T(n)趋于无穷大的快慢,并以此来分析算法的时间复杂性.我们往往用几个定义在自然数集N上的正值函数Ỹ(n):幂函数nk(k为正整数),对数幂函数lgkn(k为正整数,底数为2)和指数函数an(a为大于1的常数)作为"标准",研究极限 lim_{ntoinfty}frac{T(n)=lambda }{widetilde{Y

《趣题学算法》—第0章0.5节算法分析

0.5 算法分析解决同一问题的不同算法所消耗的计算机系统的时间(占用处理器的时间)和空间(占用内部存储器空间)资源量可能有所不同.算法运行所需要的资源量称为算法的复杂性.一般来说,解决同一问题的算法,需要的资源量越少,我们认为越优秀.计算算法运行所需资源量的过程称为算法复杂性分析,简称为算法分析.理论上,算法分析既要计算算法的时间复杂性,也要计算它的空间复杂性.然而,算法的运行时间都是消耗在已存储的数据处理上的,从这个意义上说,算法的空间复杂性不会超过时间复杂性.出于这个原因,人们多关注于算法的

《趣题学算法》—第1章1.2节简单的数学计算

1.2 简单的数学计算以上那样利用循环重复将部分数据简单地累加,可以解决很多计数问题.然而,如果计数问题可以通过数学计算直接得出结果,往往可以大大改善算法的时间效率,请看下列问题. 问题1-5 小小度刷礼品图片 7 问题描述 一年一度的百度之星大赛又开始了,这次参赛人数创下了吉尼斯世界纪录.于是,百度之星决定奖励一部分人:所有资格赛提交ID以x结尾的参赛选手将得到精美礼品一份. 小小度同学非常想得到这份礼品,于是他就连续提交了很多次,提交的ID从a连续到b.他想知道能得到多少份礼品,你能帮帮他吗

《趣题学算法》—第1章1.3节加法原理和乘法原理

1.3 加法原理和乘法原理 组合数学中有两条著名的原理--加法原理和乘法原理.利用这两条原理可以快速地解决一些计数问题. 加法原理:做一件事,完成它可以有n类办法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,--,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+m3+-+mn种不同方法. 乘法原理:做一件事,完成它需要分成n个步骤,做第一步有m1种不同的方法,做第二步有m2种不同的方法,--,做第n步有mn种不同的方法,那么完成这件事共有N=m1×m2

《趣题学算法》—第0章0.8节从这里开始

0.8 从这里开始作为本书讨论的起点,本章通过解决一个典型的计算问题"计算逆序数",明确了诸如算法.伪代码.算法分析.C++程序等概念.术语或名称.通过讨论问题"移动电话"给出了本书每个问题讨论的体例:描述问题--理解问题--设计算法--分析算法的效率. 如果你是一位编程初学者,在看了这两个例子后是否会有这样的问题:怎么会想到这样解这些问题?其实,这和你在学校里学习数学时解应用题很相像.首先,看看题目是归类于代数.几何还是微积分?如果是代数题,再看是用解方程方法还是