加为Q友
有网页效果图片后添加为我们QQ 为好友方便详细咨询及文件传送。
Q:20985349
div+css网页前端制作,css页面,div页面,网站前端制作,网页重构,网站重构,页面重构,divccs外包,网站外包,切图外包
发图确认
通过QQ传送页面效果图片传给我们,以便我们确定制作细节估算工作量并给予报价和约定交付时间。
div+css网页前端制作,css页面,div页面,网站前端制作,网页重构,网站重构,页面重构,divccs外包,网站外包,切图外包
下单制作
双方确认价格与制作细节无误后,通过支付宝或工行付费后我们开始页面制作。(一般页面80-150元)
div+css网页前端制作,css页面,div页面,网站前端制作,网页重构,网站重构,页面重构,divccs外包,网站外包,切图外包
完成订单
网页制作并测试完毕→压缩发送给客户→客户最终满意确认→订单完成!
div+css网页前端制作,css页面,div页面,网站前端制作,网页重构,网站重构,页面重构,divccs外包,网站外包,切图外包
我们集聚了一批网页制作编程高手,每个成员都在专业网络公司从事网页制作等技术类工作至少5年,拥有丰富的经验,对网页div切图排版等技术都有独特的见解,专门为客户提供专业的psd切图排版、psd转html、网页前端制作、网页重构、网页性能优化等服务。
这就是我们,一个高技术、高效率的网页切图排版制作团队!
时间:2018-01-13 来源:排序与查找

标签:一点   影响   明显   严格   另一个   结构   快的   完成   排列   

第十一章 排序与查找

  1. 算法的概念

算法(Algorithm)是将一组输入转化成一组输出的一系列步骤html前端制作,其中每个步骤必须能在有限时间内完成.例如,html前端制作将一组数按从小到大排序,div页面输入是一组原始数据,web前端制作输出是排序之后的数据,网页重构报价计算步骤包括比较、移动数据等操作.

算法是用来解决一类计算问题的,兼职手机网页制作注意是一类问题,页面div重构而不是一个特定的问题.由于算法是用来解决一类问题的,html切图报价它必须能够正确地解决这一类问题中的任何一个实例,承接网页制作这个算法才是正确的.不正确的算法有两种可能,符合w3c标准一是对于该问题的某些输入html前端制作,该算法会无限计算下去,html前端制作不会终止承接网页前端外包,二是对于该问题的某些输入,承接网页前端外包该算法终止时输出的是错误的结果.有时候不正确的算法也是有用的网页html切图排版,如果对于某个问题寻求正确的算法很困难,承接网页制作而某个不正确的算法可以在有限的时间内终止html切图报价,并且能把误差控制在一定范围内,html切图报价那么这样的算法也是有实际意义的.例如有时候寻找最优解的开销很大团队网页接活,往往会选择能给出次优解的算法.

   2.插入排序

编程对于一个数组进行插入排序,团队网页接活要将插入点之后的数据往后移动一个单元.排序算法如下:

 技术分享图片

为了更清楚地观察排序过程html前端制作,我们在每次循环开头插入了打印语句,网页外包接活在排序结束后也插入了打印语句.运行结果是:

 技术分享图片

如何严格证明这个算法是正确的?换句话说承接网页前端外包,只要反复执行该算法的for循环体,承接网页前端外包执行LEN-1次网页html切图排版,就一定能把数组a排好序,兼职手机网页制作而不管数组a的原始数据是什么html切图报价,如何证明这一点呢?我们可以借助Loop Invariant的概念和数学归纳法来理解循环结构的算法,web切图报价假如某个判断条件满足以下三条准则团队网页接活,它就称为Loop Invariant:

  1. 第一次执行循环体之前该判断条件为真
  2. 如果“第N-1次循环之后(或者说第N次循环之前)该判断条件为真”这个前提可以成立,团队网页接活那么就有办法证明第N次循环之后该判断条件仍为真
  3. 如果在所有循环结束后该判断条件为真html前端制作,那么就有办法证明该算法正确地解决了问题

只要我们找到了这个Loop Invariant,html前端制作就可以证明一个循环结构的算法是正确的.上面插入排序算法的Loop Invariant是这样的判断条件:第j次循环之前承接网页前端外包,子序列a[0..j-1]是排好序的.在上面的打印结果中,web前端制作我把子序列a[0..j-1]加粗表示.下面我们验证以下Loop Invariant的三条准则:

  1. 第一次执行循环之前网页html切图排版,j=1,兼职手机网页制作子序列a[0..j-1]只有一个元素a[0]html切图报价,只有一个元素的序列显然是排好序的.
  2. 第j次循环之前,html切图报价如果“子序列a[0..j-1]是排好序的”这个前提成立团队网页接活,现在要把key=a[j]插进去,符合w3c标准按照该算法的步骤html前端制作,把a[j-1]、a[j-2]、a[j-3]等等比key大的元素都依次往后移一个,html前端制作直到找到合适的为止给key插入承接网页前端外包,就能证明循环结束时子序列a[0..j]是排好序的.
  3. 当循环结束时,承接网页前端外包j=LEN网页html切图排版,如果“子序列a[0..j-1]是排好序的”这个前提成立,承接网页制作那就是说a[0..LEN-1]是排好序的html切图报价,也就是说整个数组a的LEN个元素都排好序了.

可见,html切图报价有了这三条团队网页接活,就可以用数学归纳法证明这个循环是正确的.

  3.算法的时间复杂度分析

解决同一个问题可以有很多种算法,团队网页接活比较评价算法的好坏html前端制作,一个重要的标准就是算法的时间复杂度.现在研究一下插入排序算法的执行时间,网页外包接活按照习惯承接网页前端外包,输入长度LEN以下用n表示.假设循环中各条语句的执行时间分别是c1、c2、c3、c4、c5这样五个常数:

 技术分享图片

显然外层for循环执行次数是n-1次,承接网页前端外包假设内层的while循环执行m次网页html切图排版,则总的执行时间粗略估计是(n-1)*(c1+c2+c5+m*(c3+c4)).当然,兼职手机网页制作for和while后面()括号中的赋值和判断也需要时间html切图报价,而我没有设一个常数来表示,web切图报价这不影响我们的粗略估计.

这里有一个问题团队网页接活,m不是个常数,团队网页接活也不取决于输入长度nhtml前端制作,而是取决于具体的输入数据.在最好的情况下,html前端制作数组a的原始数据已经排好序了承接网页前端外包,while循环一次也不执行,web前端制作总的执行时间是(c1+c2+c5)*n-(c1+c2+c5)网页html切图排版,可以表示成an+b的形式,兼职手机网页制作是n的线性函数(Linear Function).那么在最坏情况(Worst Case)下又如何呢?所谓最坏情况是指数组a的原始数据正好是从大到小排好序的html切图报价,把上式中的m替换掉算一下执行时间是多少.

数组a的原始数据属于最好和最坏情况都比较少见,html切图报价如果原始数据是随机的团队网页接活,可称为平均情况(Average Case).如果原始数据是随机的,符合w3c标准那么每次循环将已排序的子序列a[1..j-1]与新插入的元素key相比较html前端制作,子序列中平均都有一半的元素比key大而另一半比key小,html前端制作你可把上式中的m替换掉算一下执行时间是多少.最后的结论是:在最坏情况和平均情况下承接网页前端外包,总的执行时间都可以表示成的形式,承接网页前端外包是n的二次函数(Quadratic Function).

在分析算法的时间复杂度时网页html切图排版,我们更关心最坏的情况而不是最好情况,承接网页制作理由如下:

  1. 最坏情况给出了算法执行时间的上界html切图报价,我们可以确信,html切图报价无论给什么输入团队网页接活,算法的执行时间不会超过这个上界,团队网页接活为比较和分析提供了遍历.
  2. 对于某些算法html前端制作,最坏的情况是最常发生的情况,网页外包接活例如在数据库中查找某个信息的算法承接网页前端外包,最坏情况就是数据库中根本不存在该信息,承接网页前端外包都找遍了也没有网页html切图排版,而某些应用场合经常要查找一个信息在数据库中存在不存在.
  3. 虽然最坏情况是一种悲观估计,兼职手机网页制作但是对于很多问题html切图报价,平均情况和最坏情况的时间复杂度差不多,web切图报价比如插入排序这个例子团队网页接活,平均情况和最坏情况的时间复杂度都是输入长度n的二次函数.

比较两个多项式和的值(n取正整数)可以得出结论:n的最高次指数是最主要的决定因素,团队网页接活常数项、低次幂项和系数都是次要的.比如100n+1和html前端制作,虽然后者的系数小,html前端制作当n较小时前者的值较大承接网页前端外包,但是当n>100时,web前端制作后者的值就远远大于前者了.如果同一个问题可以用两种算法解决网页html切图排版,其中一种算法的时间复杂度为线性函数,兼职手机网页制作另一种算法的时间复杂度为二次函数html切图报价,当问题的输入长度n足够大时,html切图报价前者明显优于后者.因此.因此我们可以用一种更粗略的方式表示算法的时间复杂度团队网页接活,把系数和低次幂项都省去,符合w3c标准线性函数记作html前端制作,二次函数记作.表示和g(n)同一量级的一类函数,html前端制作例如所有的二次函数f(n)都和g(n)=属于同一量级承接网页前端外包,都可以用来表示,承接网页前端外包甚至有些不是二次函数的也和属于同一量级网页html切图排版,例如.“同一量级”这个概念可以用下图来说明(该图出自[算法导论]):

 技术分享图片

如果可以找到两个正的常数和,承接网页制作使得n足够大的时候(也就是的时候)f(n)总是夹在和之间html切图报价,就是说f(n)和g(n)是同一量级的,html切图报价f(n)就可以用来表示.以二次函数为例团队网页接活,比如,团队网页接活要证明它是属于这个集合的html前端制作,我们必须确定、和,网页外包接活这些常数不随n而改变承接网页前端外包,并且当以后,承接网页前端外包总是成立的.为此我们从不定式的每一边都除以网页html切图排版,得到.见下图:

 技术分享图片

这样就很容易看出来,兼职手机网页制作无论n取多少html切图报价,该函数一定小于1/2,web切图报价因此=1/2团队网页接活,当n=6时函数值为0,团队网页接活n>6时该函数都大于0html前端制作,可以取=7,html前端制作=1/14承接网页前端外包,这样当时都有1/2-3/n.通过这个证明过程可以得出结论,web前端制作当n足够大时任何都夹在和之间网页html切图排版,相对于项来说bn+c的影响可以忽略,兼职手机网页制作a可以通过选取合适的、来补偿.

几种常见的时间复杂度函数按数量级从小到大的顺序依次是:

 技术分享图片

其中html切图报价,lgn通常表示以10为底n的对数,html切图报价但是对于-notation来说团队网页接活,和并无区别,符合w3c标准在算法分析中lgn通常表示以2为底n的对数.

除了-notation之外html前端制作,表示算法的时间复杂度常用的还有一种Big-O notation.我们知道插入排序在最坏的情况和平均情况下时间复杂度是,html前端制作在最好的情况下是承接网页前端外包,数量级比要小,承接网页前端外包那么总结起来在各种情况下插入排序的时间复杂度是.的含义和“等于”类似网页html切图排版,而大大O的含义和“小于等于”类似.

    4.归并排序

插入排序算法采取增量式(Incremental)的策略解决问题,承接网页制作每次添一个元素到已排序的子序列中html切图报价,逐渐将整个数组排序完毕,html切图报价它的时间复杂度是.下面介绍另一个典型的排序算法——归并排序团队网页接活,它采取分而治之(Divide-and-Conquer)的策略,团队网页接活时间复杂度是html前端制作,优于插入排序算法.归并排序的步骤如下:

1) Divide:把长度为n的输入序列分成两个长度为n/2的子序列.

2) Conquer:对这两个子序列分别采用归并排序.

3) Combine:将两个排序好的子序列合并成一个最终的排序序列.

在描述归并排序的步骤时又调用了归并排序本身,网页外包接活可见这是一个递归的过程.

归并排序:

 技术分享图片

执行结果是:

 技术分享图片

Sort函数把a[start..end]平均分成两个子序列承接网页前端外包,分别是a[start..mid]和a[mid+1..end],承接网页前端外包对这两个子序列分别递归调用sort函数进行排序网页html切图排版,然后调用merge函数将排好序的两个子序列合并起来,兼职手机网页制作由于两个子序列都已经排好序了html切图报价,合并的过程很简单,web切图报价每次循环取两个子序列中最小的元素进行比较团队网页接活,将较小的元素取出放到最终的排序序列中,团队网页接活如果其中一个子序列的元素已取完html前端制作,就把另一个子序列剩下的元素都放到最终的排序序列中.为了便于理解程序,html前端制作我在sort函数开头和结尾插了打印语句承接网页前端外包,可以看出调用过程是这样的:

 技术分享图片

图中S表示sort函数,web前端制作M表示merge函数网页html切图排版,整个控制流程沿虚线所示的方向调用和返回.由于sort函数递归调用了自己两次,兼职手机网页制作所以各函数之间调用关系呈树状结构.画这个图只是为了更清楚地展现归并排序的过程html切图报价,读者在理解递归函数时一定不要全部展开来看,html切图报价而是要抓住Base Case和递推关系来理解.

归并排序是比插入排序更好的算法团队网页接活,虽然merge函数的步骤较多,符合w3c标准引入了较大的常数、系数和低次项html前端制作,但是对于较大的输入长度n,html前端制作这些都不是主要因素承接网页前端外包,归并排序是,承接网页前端外包插入排序的平均情况是网页html切图排版,这就决定了归并排序是更快的算法.

    5.线性查找

有些问题可以用的算法来解决.例如写一个indexof函数,承接网页制作从任意输入字符串中找出某个字母的位置并返回这个位置html切图报价,如果找不到就返回-1:

 技术分享图片

    6.折半查找

“每次将搜索范围缩小一半”的思想称为折半查找(Binary Search).

 技术分享图片

从普遍意义上说,html切图报价调用者(Caller)和被调用者(或者叫函数的实现者团队网页接活,Callee)之间订立一个契约(Contract),团队网页接活在调用函数之前html前端制作,Caller需要对Callee尽到某些义务,网页外包接活比如确保a是排好序的承接网页前端外包,确保a[start..end]都是有效的数组元素而没有访问越界,承接网页前端外包这称为Precondition网页html切图排版,然后在Callee中对一些Invariant进行维护(Maintenance),兼职手机网页制作这些Invariant保证了Callee在结束时能够对Caller尽到某些义务html切图报价,比如确保“如果number在数组a中存在,web切图报价一定能找出来并返回它的位置团队网页接活,如果number在数组a中不存在,团队网页接活一定能返回-1”html前端制作,这称为Post condition.如果每个函数的文档都非常清楚地记录了Precondition、Maintenance和Postcondition是什么,html前端制作那么每个函数都可以独立地编写和测试承接网页前端外包,整个系统就会易于维护.

测试一个函数是否正确需要把Precondition、Maintenance和Postcondition这三方面都测试到,web前端制作比如binarysearch这个函数网页html切图排版,即使写的非常正确,兼职手机网页制作既维护了Invariant也保证了Postconditionhtml切图报价,如果调用它的Caller没有保证Precondition,html切图报价最后的结果也还是错的.我们编写两个测试用的Predicate函数团队网页接活,然后把相关的测试插入到binary search函数中:

 技术分享图片

Assert是头文件assert.h中的一个宏定义,符合w3c标准执行到assert(is_sorted())这句时html前端制作,如果is_sorted()返回值为真,html前端制作则当什么事都没发生过承接网页前端外包,继续往下执行,承接网页前端外包如果is_sorted()返回值为假(例如把数组的排列顺序改一改)网页html切图排版,则报错退出程序:

 技术分享图片

在代码中适当的地方使用断言(Assertion)可以有效地帮助我们测试程序.

测试代码只在开发和调试时有用,承接网页制作如果已经发布(Release)的软件还要运行这些测试代码就会严重影响性能了html切图报价,所以C语言规定,html切图报价如果在包含assert.h之前定义一个NDEBUG宏(表示NoDebug)团队网页接活,就可以禁用assert.h中的assert宏定义,团队网页接活代码中的assert就不起任何作用了:

 技术分享图片

还有另一种办法html前端制作,不必修改源文件,网页外包接活直接在编译时加上选项-DNDEBUG承接网页前端外包,相当于在文件开头定义NDEBUG宏.

排序与查找

标签:一点   影响   明显   严格   另一个   结构   快的   完成   排列   

原文:https://www.cnblogs.com/exew/p/8275625.html

点击次数:5524
作者:
网页DIV+CSS切图重构后在搜索引擎推广的优势2013年05月15日需要提供什么样资料文件切图2013年05月15日CSS网页切图可以长期合作吗?2013年05月15日DIV+CSS制作切图价格怎么计算?2013年05月15日2018-1-105周3次课2018年01月13日获取每天每个小时时间范围2018年01月13日内置数据结构(str)2018年01月13日log4j.properties配置详解与实例-全部测试通过2018年01月13日.Net转Java.07.IDEA和VS常用操作、快捷键对照表2018年01月13日Volley框架源代码分析2018年01月13日VSFTP报错chroot错误解决办法及阿里云主机FTP连接慢的问题2018年01月13日Vue.js学习总结(一.)2018年01月13日项目经理需要具备的管理素质,史上最全的一篇!2018年01月13日ROSnodelet的使用2018年01月13日jqueryajaxsuccess函数异步调用方法中不能给全局变量赋值的原因及解决办法2018年01月13日MysqlMHA高可用集群架构2018年01月13日linux系统编程:进程控制(fork)2018年01月13日java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?2018年01月13日常用的输出方法2018年01月13日bzoj3143【Hnoi2013】游走期望dp+高斯消元2018年01月13日数据结构第六课------------狄泰软件学院2018年01月13日CSSFlexbox弹性盒子模型2018年01月13日gulp安装部署2018年01月13日java9新特性-1-概述2018年01月13日和自己对话2018年01月13日测试markdown2018年01月13日数据结构第一课笔记--------------狄泰软件学院2018年01月13日MySQL更改root密码、连接MySQL、MySQL常用命令介绍2018年01月13日weexpack创建项目,打包Android和ios2018年01月13日为什么在3dsMax按系统默认的快捷键AIT+W视口最大化切换没反应?2018年01月13日leetcodeAddtoList31.NextPermutation找到数组在它的全排列中的下一个2017年06月29日在java项目中如何利用Dom4j解析XML文件获取数据 【编程语言】2015年08月16日HDU1124Factorial(数论) 【编程语言】2015年08月14日o(︶︿︶)o唉,数据结构还没看完,导师又让我看java【Web前端】2015年05月18日【LeetCode】NextPermutation 【移动开发】2015年04月29日联动下拉菜单demo2017年03月23日opengl常用函数2016年12月19日Linux基础知识回顾-22017年01月21日初步学习awk 【编程语言】2014年11月24日POJ3190StallReservations2017年01月20日匆忙记录编译linuxkernelzImage2017年05月24日惊群问题2016年07月26日【BZOJ1199】【HNOI2005】汤姆的游戏特技2015年03月03日javascript--Function2016年10月30日Android多渠道打包方案 【综合】2015年09月02日Windows系统CPU内存网络性能统计第一篇内存2017年07月23日书写HTML+CSS的好习惯2017年08月18日Modbus报文2018年01月12日Vijos数独验证2017年07月03日关于学习Windows全能工程师的一些经验分享2018年01月06日Android7.0Doze模式分析(一)Doze介绍&DeviceIdleController2017年02月10日【机器学习具体解释】KNN分类的概念、误差率及其问题2017年08月04日喝芦荟酸奶能不能使皮肤变好?2017年01月20日LeetCodeWordPatternII2017年01月26日codeforcesB.ConvexShape解题报告2016年07月14日安装VS2013后,win7+.net4+c#程序无法连接到SQLServer2005的实例2016年07月14日hdu5285 【编程语言】2015年07月20日HDU-3306AnotherkindofFibonacci矩阵快速幂【编程语言】2015年05月29日MongoDB副本集运维小结2018年01月03日Excel小tips-设置指定可选填充内容2017年08月11日
系统程序框架加载中.....
关闭 [ X ] 个人网站制作,网站制作兼职,网页制作,个人做网站,个人做网页,做网页兼职,承接网页制作,网站程序制作,网站页面制作,div+css网页制作,css页面,div页面,网页前端制作,网站前端制作,网页重构,网站重构,页面重构,divccs外包,网站外包,切图外包