这节课果冻来告诉大家,写代码到底有多简单, 逻辑是什么?逻辑就是伪代码,伪代码是什么?伪代码就是逻辑。 很多人可能会觉得写代码特别神奇,这群秃子好像无所不能,想要尝试,却总是被各种奇怪的语法折磨的痛不欲生。 其实语法什么的都不重要,连七岁小朋友都可以写代码,你看小朋友在屏幕上拖拽,这叫 scratch, 又叫可视化编程。 任何一个成年人都可以在三分钟之内学会编程,你会觉得这似乎和我看到的成 序员学代码不一样,其实道理完全一样。你要学习编程,就要分成尾代码加语法两步走, 先学会写尾代码,再去学习语法和 s、 d、 k。 所以尾代码到底是什么呢?就是做事的顺序,你可以理解为自己就是一个皇帝,做什么事情都只需要张嘴说就好。 代码的关键就是在发布命令的时候要头脑清楚,不能出错。至于执行的人到底是男人女人还是狗,都不重要。 有大神证明过,任何指令都可以用顺序、循环、判断三种结构来完成, 这就是尾代码的样子。顺序结构就是先执行完一条指令,再执行第二条指令。循环结构就是反复执行循环区域的指令。 判断就是满足条件就怎么样,不满足条件就怎么样。所以我们在编程的时候就是要想清楚,先做什么再做什么,什么时候加判断,什么时候来循环。 举一个真实的例子,我们打开黑塔小程序,点开第二个 icon。 职业看到了职业列表页, 这里会展示互联网的各种推荐职业,这个页面怎么用伪代码来实现呢?第一步,找后端获取数据。第二步,解析后端的数据,拿到职业链 列表。第三步,循环职业列表,显示每一个职业的图片名称介绍。 第四步,判断服务器端展示的数据里有没有下一页,如果有,下一页就展示,下一页,没有就不展示,这就是尾代码。 再复杂的事情都可以通过这种方式拆解出来指令用顺序循环和判断来完成,这是非常非常重要的思维训练。 而如果你想要知道怎么样获取数据,怎么样展示数据,这就是接下来要学习到的每一种语言的语法和他们的 sdk 了。好了,这次的课程就先到这里了。
粉丝390获赞791

hello, 朋友们,今天呢,我们来对比一下生成模型和判别模型他们之间的尾代码,嗯是什么样的一个区别 啊?我想的话可能这样这样写比较,呃清楚明了,能够说明他们之间的一些联系和在哪个地方他们变得不一样了。首先让我们看一下生成模型, 它的输入呢就是我们非常熟悉的数据,嗯,从一到 n, 然后呢初始化模型参数 c 塔, 这个 seta, 它一般都是一个呃非常嗯 plan 的东西,比如说均匀分布,呃它就不预设任何东西。呃,如果我们是一个多变量的高斯分布 里面,你还要设定这个 sigma, 也就是斜方叉啊,他这个时候呢也会设定为两者完全不相关啊,所以也就是一个用囊派里面的爱来实现的,只有对角线上是一,其他地方都为零。 all right 就初始化就是指我完全什么样的时候我都不知道的情况下,我会怎么样预设啊?最简单的就是我预设他们所有的机会都是相等的, 我们重复直到满足停止条件或者达到最大迭代次数啊,这就是一个我们啊需要迭代的一个 hyperpremeter, 一个超参数。呃,如果比如说你设定的是一百 啊,不管你达没达到,就是他停止的条件啊,达到了最大迭代次数就会停止 right。 然后第一步呢,是从参数化的概率分布模型中生成潜在变量 z 啊,这个呢就是我们假定啊,他是有一个 underlying, 嗯, latin variable, 对于每一个观测数据 x i 啊,从概率分布模型中采样生成潜在变量 c 啊,也就说我认为你啊有一个更能够代表啊你现在特征的潜在变量。第二步呢,是使用深层的潜在变量和这个参数 计算观测数据的对数自然函数,也就是 log likely 和 会看到它,这个是一个条件概率啊,也就是在 theta 和 z 的大前提之下,嗯,出现 x, 也就是我们观测到数据的 probability 是多少? 第三步呢,就是使用最大自然估计或者其他的优化方法,嗯,更新这个模型 啊,他的一个,嗯,通用特征就是我去看他哪一个 providity 最高,对吧?最高的这个 cat 我就应该去把它留下来啊,所以呢,他这个 cat 就一直被更新为,嗯,当你得 得到最大的 log like 以后时候的 set, 也就是我最后需要的这个东西。那么生存模型呢,你会看到它的这个方式啊,就是我去找这个 latin variable, 然后呢计算 probability, 找到对应的,呃,最大 probability 时候的 setary 就是参数,然后以后我每一次在预测的时候呢,就是 x 乘以 setary, 就是我的要求的 y hat。 那么我们来看一下这个判别模型啊, 判别模型啊,他就是,嗯,第一步呢也是一模一样的,嗯,只是呢,他现在啊更加的注重 这个 y 啊,首先呢,就是,呃,这个外围的条件都是一样的啊,首先呢是使用观测数据和标签计算这个处预测值 啊,他的首先的这个模型啊,也是一个非常简单的东西,嗯,对于每一个观测数据,他的预测值 why had, 也就是现在这个样子, 一开始都是非常不好的,而且它也是像我们之前说的这个就是深层模型一样,我一开始预预设的这个初始值啊,都是不带任何预预设的,呃,第二步呢,是 使用预测值和标签计算啊,损失函数啊,这已经就看到不一样的地方了。嗯,第二步啊,他是在深层模型里面,他是计算这个 probability, 但是这里呢,我就是去一个一个的对答案,就是我掌握现在预测的这个东西啊,和和这个真实的 y, 这个 y two 它之间的差距到底是多少? 然后呢,我第三步就是使用大家非常熟悉的,比如说梯度下降,我其他优化方法啊,我就去一步一步的减少这个损失啊,最后呢也是输出这个参数, 嗯,所以呢,嗯,我们可以看到在每一次叠大 当中啊,我们都使用的是观测数据和这个模型的参数来计算模型的预测值,然后呢使用这个预测值和标签来计算损失函数, 然后呢我们就使用这个 t 度下降和其他优化方法,嗯,根据这个损失函数的 t 度来更新模型参数,所以, 嗯,你会看到他们俩之间的一个区别就在于啊,我到底是使用什么样的方式来提高嗯,这个准确度的。 那么在生成模型里面呢,总结一下就是,嗯,在每次迭代的时候呢,我们都是从一个参数化的概率分布模型当中生成一个潜在变量啊,并使用这个 深层的 latin variable 和模型参数来计算观测数据的对数自然函数。然后呢,我们就使用一些最大自然估计或者其他的优化方法来更新这个参数,以最大化观测数据的对数自然函数为目标, 所以他们最大的区别在于他们这个优化目标完全不同。 ok, 那么今天呢,我们就讲完了关于这两者之间的一些区别和联系啊,以及这个伟大码大体是什么样子的,拜拜。

三分钟教你弄明白什么是代码!你可能没见过代码,但是你却无时无刻都在和代码打交道。你点外卖的按吧,每天客厅的游戏,陪你一起享受九九六福报的 word、 excel, 甚至看各种小电影的网站,都是用代码写的。代码到底是什么? 我们常说的代码,大部分时候指的是某种编程语言,所谓编程语言,简单的理解就是能让计算机执行复杂功能的一种计算机语言。比如说可以让你的手机或者电脑点外卖,看电影、玩游戏。 计算机语言,嗯,这是如果去掉计算机三个字,只说语言,我相信大家绝对不会陌生,我们每天都在使用的母语汉语是我们再熟悉不过的一门语言。 我们人类的语言是用来人与人之间进行沟通和交流,而计算机语言很显然就是人类设计的。记住,是人类设计的用来和计算机沟通交流的一类语言的统称。目前世界上计算机语言已经有成百上千门了,那计算机语言和人类语言一样,有自己的书写规范、语言标准,也就是我们人类语言中的语法。虽然他们被称为是计算机语言,但是他们其实是设计出来,被人写,被人读的,而最 常使用他们的,正是那些享受的九九六福报,人在青年却限定的码农们。如果你从来没见过所谓的代码,那我们就先来看一个名叫 just river 的语言的一小段代码。 如果你之前没学过编程,可能乍一看会有点懵,但是仔细一看,其实这里面啊,都是一些英文字符以及一些数学符号,我们先忽略,我们看不懂的同时把里面的英文单词翻译成中文。现在我们应该能看明白了, x 等于三十,就是说这个位置数 x 的值是三十,如果 x 小于二十,弹出警告,这是一幅语句,其他情况弹出警告,这是 x 语句。


这两个你说什么是代码?你可能没有见过代码哈,但是呢,我们每天呢都会跟代码打交道,你点的外卖, app, 玩的游戏,还有看的网站都是呢,代码写出来的就是一种编程语音呢,其实就是让电脑执行复杂功能的一种计算语言, 那比如说可以让你的手机可以点外卖,看电影,玩游戏,这样你能理解吗?嗯,再简单点,这样吧,以你的智商啊, 那就把计算机语言呢拆开成语言两个字,语言懂不懂就是你说的话,你现在跟我的对话,普通话,我们相互交流嘛,那么计算机语言呢,就是人类设计的语言, 可能有上千万种了,是不是?比如说我们程序用的会是什么呢?扎瓦啦, php 啦,购物啦,这些是不是计算机语言呢,也有自己的书写规范,就算你写的字啊啊,也不能乱写,是不是计算机语言也是有着自己的普法的?可以这么说,普遍上呢,看上去呢,就是英文字符加数字字符,程序员日夜熬夜熬熬秃了头发,就是敲这些代码的,代码的 作用呢,就是让计算机做出他想要的功能,做出你想要看到的效果,这样设计出来的小程序或者是 app 就我们自己的特色了。所以其实更多的客户啊,想要优先选择定制开发小程序呢,价格三五万不等,按照需求进行报价。

如果你想买原码,又担心被骗,教你一招,马上识别他卖的是原码还是模板还是盗版的代码。例如说你买的是一个商城小程序,你只需要告诉他,我希望在商品的详细页的标题下边加一个最近的销量, 就是他发给你的模板,没有什么,你就加那么一点小功能,例如说加最近有多少人浏览,加最近有多少人购买过,或者说加总共卖了多少个。 如果说他能加,证明这就是他自己的原码,如果说不能加,那多半就是模板甚至是盗版的代码。这一招你学会了吗?

注意了,这串代码千万不要在手机上输入,广东佛山的刘某就差点被骗子骗走两万四千元,这个代码就是星星二幺星,骗子通常呢会想尽办法让你进行这个操作,那当我们手机的拨号界面输入这个星星二幺星,加上任意的手机号码,再按下拨号键,会发生什么事呢? 这个其实就是一条呼叫转移指令,骗子接下来就会开始诱导刘某将电话转移到自己的手机上,成功屏蔽了受害人刘某的电话,进而呢转移受害人的财产。 所以朋友们,今后一旦有人让你在手机上输入星星二幺星这串代码,您可就一定要提高警惕了。最后,金律师再教您一招,输入井井二幺井就可以将其取消,您学会了吗?关注金律师,让您少吃亏!

成为黑客第一步,学会这串超简单代码。首先桌面新建一个文本,文档,名字改一下,后缀改为点 bed。 右击编辑,输入上面这串代码,然后保存, 双击运行。

存代码、低代码、无代码之间的区别。二零一八年之前,绝大多数编程都是通过手写所有代码完成,为了实现某个功能,程序员必须一个字符一个字符的敲出来记。存代码 由于人为的因素较多,那么必然就会产生许多混乱的问题。每个人都有自己的思维方式,会用自己认为的逻辑来编写代码,所以对于实现相同的功能,有的人简单可能一行代码就能搞定, 而有的人想的多一点,就会使用多行代码来践踏逻辑。我们都知道,代码越多,其中的逻辑就越复杂。随着公司及业务的发展,如果以后在此代码基础上进行 添加、删除或更改代码,那么产生 bug 的可能性就越大。如果存在人员离职、代码交接或者有跨部门合作, 当新人接手的时候,必然先要理解过去代码的逻辑,然后再叠加或修改代码量大,效率低,产生 bug 的风险相对就会成为必然。 那么最大会带来什么样的损失呢?如果是合同出错、财务失效、数据库被盗之类的问题,几百人的小公司可能会蒙受几十万的损失, 至于几万人的大公司或者国际型公司,可能就会承担几亿的损失。那么我们有没有办法去避免这些问题呢?答案是有的,就是要降低人为 因素的占比。简单来说,就是尽量实现代码自动化,精简并统一代码规则,规避复杂的逻辑嵌套,降低电影长度,提高研发效率。我们统称为可视化编程。可视化编程主要分为两类, 一类是低代码,另一类就是无代码。低代码与传统编写代码的 id 有所不同。 二零一八年开始,中国大陆市面上就有许多软件可以通过可视化 id 生成代码,俗称为低代码开发平台。 例如,你拖在组件生成一个界面,或者用触控笔在界面中画一幅画,系统就会将这幅画转换成一行行的代码片段,再把这些代码片段粘贴到程序员的主代码中,稍加 修改就可以运行起来,节省了很多精力,也降低了 bug 产生的比例。 无代码随着时代的发展,现代人越来越懒,连代码都不想写了。如今人工智能已经比较成熟了,你通过组建设计一个页面,系统就会自动生成全国代码并运行起来,且在一定范围内不再产生 bug。 纯代码、低代码、无代码,三者之间是不是无代码最好呢?当然不是,使用无代码平台简单省事,但控制权在别人那里。 使用低代码平台呢,虽然便捷高效,但要缴纳相应的租赁费用。使用纯代码呢,人力成本高,但表达更准确, 能够更好的满足平台资金的兼容性,以及能够更快的实现版本的迭代。也就是说,这三种没有谁好谁坏,只有谁能够更加适合你们公司的业务。

低代码代码还分高低吗?别急,今天我们就来聊聊这种让小白也可以轻松开发线上产品的第一代码。 低代码真名叫做 logo, 可他一点也不 low, 他不仅可以让你身边不太精通编程的财务、行政、保洁阿姨都成为开发者,而且他的产品开发效率还是一般代码产品的六倍。那么这么神奇的低代码到底是什么呢?低代码其实是一种 可视化的应用程序开发方法,使用者会在类似这样的操作界面中,通过各个固定模块的重新组合来得到全新的低代码产品。就像是这种水泥拼装房,通过水泥模块的不同组合得到不同房屋的款。 但是水泥模块的制作还得专业人士来,低代码平台上的代码模块还得程序员们出手,那这是不是意味着 程序员们要从此走下神坛了呢?恰恰相反,低代码模式的出现可以帮助程序员们从增山改茶这种重复高价值低的劳动中解脱出来, 更专注于富有创造性和业务价值的流程上。说到这里,程序员们应该很感谢的代码的发明者吧,还看接下来了吗?要考的!

学会这些代码,在学校机房伪装电脑被黑客入侵,把你老师都给秀懵逼。安排桌面新建一个文本文档,然后后置名改为 ty, 输入这些代码, 修改一下标题和正文弹窗数量可自行调整 保存,关闭,双击运行。

有粉丝问 distract 为了解决伪共享问题,定义了几个变量,他还有些不太理解,我看了下,其实他还是没明白什么是伪共享问题。如果你理解伪共享问题,那这段代码应该能看明白吧。 那我先来说说什么是伪共享问题。伪共享是多县城编程中可能遇到的性能问题之一,它发生在多个县城访问同一个缓存行,也就是开吃烂中的不同变量时,导致不必要的缓存同步和无效缓存行。 大部分的 cpu 缓存是按行通常为六十四个字节来组织的,当多个县城访问同一个缓存行中的不同变量时,尽管他们并没有访问相同的变量, 但处理器会将整个缓存行同步,从而导致性能下降。为了更好的理解,我画了一个图,图中 a 一到 a 六就是放在了一个缓存行里的数据。假如 cpu 有一个县城修改了 a 二这个变量, 他会读取一行的数据,然后锁住,修改完成后再去通知其他 cpu。 而 cpu 二也是一样的,修改 a 四也会读取一个缓存行的数据,这样频繁的读取数量及大的数据会影响程序性能。 所以我们再来看视频开头那段代码, coser 这个变量不管和上面的 p 一到 p 七,还是和下面的 p 八到 p 十四,都会凑成一整行的开始, 而其他的变量修改都不会影响到 coser 的变量。 we distract 这个框架本身的特性就是在不断修改 coser 指针,所以能大大提高程序的性能。 那最后再来回答一下粉丝的提问,从程序代码来看, p 一到 p 六加上 y 六的确是只占了五十六个字节,但这样完全可以在节省空间的情况下,让潘顶浪大概率可以占用一个开吃啦。 比如我在一个对象里你有两个潘丁浪,那肯定是占用两行开始烂,不知道我讲明白没,如果你技术面足够广的话,看好的开源项目圆满其实都不会很费劲。关注我一个分享干货的技术博主。

零代码和低代码的区别是什么?一个简单的例子就可以解决清楚,假如你想入住到一套新房子,原始的方式呢,是自己搭建,往后一点,有那套毛坯房不需要自己搭建,但是呢,你也需要通过自己的装修,给毛坯房啊,布置水电啊,贴瓷砖这些。 再后来呢,就出现了一种精装修,开发商呢,硬装也做的很好,你只需要按照自己的心意啊,布置一些家具就可以,也就是拎包入住。第一种,自己搭建,也就是对应着我们最原始的代码开发,需要从零到一,完全自己编写程序。 第二种呢,虽然说不需要从零开始了啊,但是像水电线路的走向还是需要自己设计的,自己落实。对应代码开发仍然还是需要一些有代码经验的专业人士来完成,但是也减少了一些代码的编写量,搭建出来的系统呢,能够相对来说更 符合自己的需求。第三种,也就是类似于零代码开发,非常的轻便快捷,拎包入住,对应着就是说开箱即用,你可以直接安装平台提供的模板,然后再按照自己的需求进行随意的修改,让这个模板的功能和设置符合自己的需求, 就可以完成最终的产品开发。进入我的主页就可以免费试用上万家企业都在用的零代码开发平台,捡到云。

学会这些代码,在学校机房伪装电脑被黑客入侵,把你老师都给秀懵逼。安排桌面新建文本重命名,然后后缀名改为 ty。 输入这些代码, 修改一下标题和正文,最后修改一下弹窗数量,点击保存, 双击打开。

教你异形代码伪装成为黑客,瞬间成为网吧最瞩目的仔安排首先桌面新建一个文本文档,重命名,将后证明改为 bat 回车右键编辑输入这行代码 stark http 冒号斜杠斜杠 gekprnk 点 com 斜杠 hsck 一二 点击保存,双击打开,让你瞬间变成网吧最瞩目的赞!

鉴定一下,抖音热门边长视频 税后入账一万多,那税前是不少钱啊!我们倒回去看看,这到底是做了个什么? from total employ 的新号这不是我们眼熟的拍档小海龟画图吗?龟龟,怎么又是你? 海龟绘图很适合来引导孩子学习编程。我还是想说,这世界上没有正经程序员是会坐在工位前画这玩意的。以及用这个透透裤是画出来个什么呀?甲方能给一万多块钱,这是用龟画了个清明上河图吗? 教你只含代码,在学校机房把同学老师都给学的目的,上课桌面新建文本 同命名,然后后缀名改为 bat, 右键编辑,输入这些代码, 最后修改一下颜色,点击保存,再双击打开下课。 又是一个用命令行作妖的视频 color, 这个命令可以修改 c、 m、 d 的背景颜色及文字颜色, 不过他也只对 cmd 有效,对 micros、 linux、 unix 的终端都是无效的。然后具体颜色可以对照这个表来指定。 每个十六禁止数字对应一个颜色,比如零是黑色, f 是亮白色,使用时前面一个数字对应背景颜色,后面一个数字对应文字颜色。第二行的 echo 命令就是把字符串输出出来,然后最后一行的百 号零指代的是当前这个点 bat 文件的名字,他会让当前程序再次被执行,从而进入一个无限循环。嗯,也不能说这个机房蹦迪命令完全没用吧?但咱能不能解决一下乱码问题先? 我记得他们爱好的命令不是我是全场最靓的仔吗?那这个又是什么喽? cmd 改 utf 八编码命令是 c hcp 六五零零一以及做那个视频的人如果想补充一些编码知识的话,欢迎收看我的这个视频,不用谢。 这个京东大佬确实让我沉默了,我估计京东看了也要沉默。软件和互联网公司的正经后台基本上不会有这么花里胡哨的,可读性、清晰性才会是设计的主要准则,而装叉不应该是。另外,视频里这个不就是个一叉子模板吗? each chart 是个基于 javascript 的可视化图表库,免费开园,支持很多图表类型, 淘宝上就有很多这种大数据装叉风格的一叉子模板售卖,基本上三到十块钱左右能拿下来一个吧,每个模板都可以做一个视频,召唤了一个京东大佬, 为了给你们展示,我呢也斥巨资买了一个三块九毛九,所以这个视频也是有一定制作成本的,希望大家能够就是这个众筹报销一下,把模板 下载下来后,你就可以随便的修改内容。好了,现在人人都是京东大佬。另外我也没太想明白为什么这类视频都喜欢跟京东过不去,就京东看了都想问是腾讯阿里自己在给你交保护费了? 这期就先这么多了,大家如果有想要我鉴定的,也欢迎投稿,拜了个拜!

知道各位第一眼看到这十行代码,觉得他写的如何呢?反正我第一眼看到,感觉这代码写的比较一般。一个字符串比较的函数写的如此复杂,一开始先判断字符串的长度是否相等, 互相的直接返回,之后便利字符串对每一位通过一伙操作来比较,将每次的结果和一箍肉变量进行货运算。如果两个字符串相等,最后存储累积的变量,一箍肉肯定为零,否则为一整体。逻辑上是没什么问题,但是效率不够好, 完全可以进一步优化。在便利过程中,如果发现有一位不同,就可以直接返回,而不是全部便利一遍。所以我噼里啪啦的一顿猛敲,帮他优化了一盘。正当我心里感慨这位程序员的代码水平不怎么样的时候, 忽然我意识到事情好像没有这么简单。我注意到这个方法名是 c c quo 而不是 equos, 难道这个方 方法还暗藏玄机?无独有偶,我在 jdk 中也发现了一个相似的写法,不过看多了个注视,翻译过来长量时间比较,但还是没说明白为什么这么写,这难道是一个 boss? 为此我又去看了 php, 毕竟他是世界上最好的语言,肯定不会有问题。 果然,我在注视中发现了这样一段话,其中提到了一个很重要的词, temele tex 计时攻击,就是这个词让真相浮出了水面。计时攻击这种方式是通过公号、持续电磁泄漏等方式达到破解目的。 举个例子,假设当前使用的是不安全的 equal 方法,用户设置的密码为拍 sorry, 远端的黑客希望通过计时攻击的方式来破解用户密码,首先他会不断的媒体第一位,最终通过统计发现该密码 pxxxxxxxxx 的运行时间比其他密码时间都长,因为其他密码 在判断第一位不同时就返回了,而屁开头的字符串要到第二位不同才返回,这样黑客就能猜测出用户密码的第一位很可能是屁,然后在不断意味意味迭代下去,最终破解出用户的密码。而当我们吊用 cctrl, 就算两者不相等,但是他们所耗费的时间都会是一样的, 这样一来就可以防止黑客通过大量的改变输入,并通过统计运行时间来暴力破解出要比较的自负串。当然 从理论角度理解,但实际上程序的运行时间会受到很多影响,比如网络内存、 cpu 负载等等,因此好像看上去这个方法并不太靠谱。 然而在一篇论文中,作者就通过计时攻击方式攻破了一个基于 ubssl 的 wf 服务器的撕药,这也就证明了计时攻击在实践中确实可行。不知道各位觉得计时攻击这种方式靠谱吗?


低代码是一种可以只需少量代码即可实现应用定制的方法。不代码则是一种无需编程、知识使用、播放等操作即可构建应用的方式。在共性上来说,他们都支持可视化装修和 sa s 托管。 而相较无代码,低代码拥有以下特点开发者编程低代码平台允许开发者直接介入,支持功能定制,满足开发者和计划需求。私有化附属 千教训一代码平台支持私有化步数数据更加安全可控。生态开放性图代码采用的是在功能模块里做编辑,或者选择 处于中心化的方式,而低代码则是中心化,支持发挥想象力和创造力,并可将成果进行分享。可以说,低代码是一种能 空前街开发者、设计者、运营者的星座方法。相比于五代码,代码还能拥抱市场以及需求的变化,也更适合品牌定制。

这个视频有四十三万点赞。那看完我都无语了,什么右键新建 bat? 你不就打开个网页吗?你费这老劲还银行代码伪装黑客。那银行代码翻译过来是啥?就是打开黑客。逗你玩点 com 吗?就这玩意有啥技术含量?你直接打不就完了吗?你咋戴个帽子整个墨镜变个声你就伪装黑客了?我个去。

从前面的讨论中,通过凉水问题和求派问题的例子,我们初步了解到一个算法,那就是面向某个问题求解的操作步骤。而设计算法呢,就是要给出这样的操作步骤。 其中首先是要有个思路,也就是你考虑解决当下问题的切入点、策略或者方式,这是最基本的。然后呢,就是要把你的思路啊,清晰准确的表达出来,写在纸上,这也很重要 啊。这种表达记录的就是一种知识,是如何求解一个问题的知识。将算法以文字或图式的 方式描述出来,有许多意义,一是让别人能理解和运用,二呢是便于分析和讨论。 另外呢,写下一个算法的过程,也是这个设计者完善思路的过程。有时候,一个人明知道一个问题该怎么解,但要把解写下来并不容易。因此需要学习和练习 算法描述的方式。虽然没有什么硬性的规定,原则上呢,便于读者这个理解就好。 但实践中,人们形成了一些约定俗称的做法。其中常用的有自然语言描述、流程图描述和伪代码描述等。 我们还是通过前面两个例子来体验一下他们的不同风格。 这是前面给出的凉水问题的算法,其中每一行称为一个雨具啊,他利用七升和五升的两个桶完成倒数六升水的任务。 这就可以看成是一个用自然语言描述算法的例子。算法描述的基本追求 是目标读者与描述者有相同的理解,当然 需要有相适应的受教育和文化背景。那么这个例子怎么样呢?他的意思。那么受过中学教育的读者,大概是有共事的,都能明白。按照这个步骤执行完后, 一升桶,剩下的那就是六升水。在这个描述中的第一句显得有些特别,他本身不做什么,但只是后面的操作该怎么做, 这样的表达称为循环。也就是告诉他,后面啊,有些操作应该反复多次,完了后才能够往下继续进行。这就无形中啊,隐藏了一个范围的概念, 也就是循环应该包含后面哪些操作。在这个例子中,他指明了语句二、三、四、五。 在表现形式上呢,也特别将那四条语句做了说尽,以方便理解。另一方面,当我们讨论计算机算法的时候,算法描述的另一个追求呢, 就是要让有编程能力的人,在合理的努力下,能够把算法转换成降级程序。为此,在一些专业书上,常常采用某种伟大码描述的方式。一个呢,是书写方便,二呢,也是更加接近 计算机的程序。还是以我们前面的凉水的这个算法为例,尽管他只是一个具体的例子啊。呃,谈不上计算机程序实践,但是我们可以看看一种等效的为代码描述的样子。 这个描述呢,虽然看起来简单,但彰显了几个重要的观念。首先,是用符号也称为变量来代表事物。例如这里的 a 就代表了 七升筒, b 呢,就代表五升筒。这种约定啊,事先要有共识。其四,循环的表达,借用了编程语言中的否语句。像这个二、三、四、五、六、七 都是所谓的父子语句,有时候用箭头,有时候你可以用个等号,那都是同一个意思, 变量适当的初始化啊,常常那是很关键的。例如我们看第三句, a 减,这个括弧五减 b 啊,要送到 a 中, b 呢,在第一次出现的时候,他取什么值呢?仔细推销一下啊,只有当 b 在这个算法执行前 是零,那么算法执行后,这个 a 中才能有正确的结果。这样的问题啊,我们在后面还会多次遇到。 最后,在算法的描述中,常常会有所谓操作的力度问题,讲的是描述中指的指出的一个操作,有时候可能很简单,就像这里的父子语句。另一些时候啊,他可能意味着很复杂。 让我们来看另外一个例子。这是我们前面谈到的计算派的算法, 作为上访描述。为了方便啊,像这种自然语言和伪代码混合的方式也是可能的,意思清楚就好。我们看到这里是一个循环, 里面的第一句是要随机生成一个点,意思清楚。但要做到,那并不简单。 我们说这就是一个力度比较大的语句。下一句是要计算两个点之间的距离,也是意思清楚,力度比较大的。从计算机科学的概念上讲啊, 此处呢,就是有一种计算抽象,此处要做什么,而不讲具体实施的细节。 那么对于一般读者呢,理解要做什么就可以了,用不着管实现的细节。那为什么我们不在算法描述中也把那些细节给出来呢? 通常就是因为啊,他们不是当下所讨论算法逻辑的要件,强系写出来呢,反而会冲淡了重点。 同时啊,对于已有编程基础的读者,应该就能想到怎么具体实现了,而且方式多样。例如下面这个是一个排放代码, 通过调用适当的函数啊,写出适当的表达式,就实现了上面的要求。 这个例子呢,他比较典型,他展示了算法描述的三个基本控制结构及顺序分支和循环。 顺序就是从上到下。分支呢,就是由如果或者 if 所指示的某些操作啊,他只有当某些条件满足才执行。另外呢,这个例子呢,还 彰显了人们在实践中形成的故事习惯。当然,这个值得再强调一次。变量的初始化常常很关键。那么在这个例子中呢, 那就是这个 in circle, 表示在圆中点的个数,在进入循环之前,需要制零算法,结果才是正确的。下面我们来看看流程图的描述。还是用前面的例子。 这个是凉水问题。算了,流程图有几个基本的符号, 通过箭头连线连接起来,所表达的意思呢,相当的朴素,也符合直觉理解。一个流程图表示的算法, 一般从开始框开始,就是右边开开头那个框啊,沿箭头方向进行。其中呢,巨型的框, 表达的是操作可以用自然语言,也可以用比较抽象的符号语言。这里我们就用自然语言了。语句条件语句用菱形框表示,就是这个。下面这个 循环的概念呢,则是由一个判断条件,判断结束的条件和反方向的这个箭头连线体现出来。 为此,常常需要额外设置一个计数器变量。这里呢,我们看到这个计数器啊,必须初始化为二算法,才能给出正确的结果。这是 计算派的算法的流程图描述,看起来比前面的自然语言描述要复杂一些,但要更加完整一些,体现了流程图描述算法的所有药件。 例如,他指出了循环次数 n 应该是一个输入,也表达了这个因 circle 变量的初始化。 另外呢,还引入了一个中间变量 d 来表示数据点和圆心的距离。 这种根据需要灵活设置中间变量的做法,在算法描述中是常见的。 呃,这一部分我们谈到的是算法的描述,他就是要将球 解一个问题的过程以操作步为单位啊,清晰准确的写下来,目的是为了让目标读者看得懂,包括自己过一段时间以后还能看懂。那么这种看得懂应该是一致的, 不是大家都认为理解了,但是能理解的不一样。人们归纳出来的算法描述呢,一共有三种控制结构,就是有助于理解共识形成的。 算法描述的另一个目的是为了便于算法分析,这是我们这个课程后面要经常面对的问题。 第三个目的,这里说的是如果需要的话,有助于程序实现。原则上讲啊,我们学习算法呢,不一定要编程。不过对 对于面向计算机问题求解的算法,尽管重点依然还是在理解其中的控制和逻辑,但如果能够编程实现呢,不仅能加深理解,也是一种乐趣。