java数据结构基础:算法

java数据结构基础:算法,博智网带你了解详细信息 。
目录

  • 数据结构和算法关系
    • 高斯求和
    • 算法定义
    • 算法的特性
    • 算法设计的要求
    • 算法效率的度量方法
    • 函数的渐进增长
  • 总结

    数据结构和算法关系虽然这个标题起的叫数据结构,但是我却总结算法 。。。我不是没事找抽,只是呢,在学数据结构的时候,算法是你肯定离不开的东西 。
    你平时在网上看到的那些文章,在你不经意间搜的时候,是不是都是搜的数据结构与算法这七个字 。这说明啥,这说明他们俩是离不开的 。
    给你打个比方,你想看德云社相声(我也想看),有一天你最想看小岳岳专场,想看小白专场 。但是呢,走到园子里之后发现,他们今天生病了,换成了另一批人,你开心吗,不开心对不对 。
    所以,数据结构和算法也是这样的 。没有其中的任何一个都不行 。
    但是,根据大学里边的概念性的东西来说,类似于我们学校,算法是单独开设课程,并不是和数据结构一起 。所以,这一章还是理论 。
    高斯求和想必看到这儿的人肯定对这个人早有耳闻 。
    如果让你来做累加求和,你肯定会写这样的代码:
    int sum=0;int n=100;for(int i=0;i<=n;i++){sum+=i;}
    这样做确实没错,但是问题来了,你这和循环了多少次?如果没写错的话,是101次吧 。为什么呢,因为你在每次累加的时候都会去走一遍for循环,这样就会平平增加不必要的时间去运算,你有这时间,你根本就抢不到亚索 。
    我们直接来看这个天才当时是怎么做的 。
    因为sum=1+2+3+…+100 。
    但是呢,sum=100+99+98+…+1
    如果把他们两个加起来,那就是2sum=101+101+101+…+101
    一共多少个101,100个吧,那如果去除2呢,结果不就是5050了 。用代码怎么写?
    int i=0;int sum=0int n=100;sum=(1+n)*n/2
    这就是神童,这就是大佬,思考问题的方面都和我们不一样 。
    也就是说,用这种方式,我们省略掉了那100次多余的运算,只需要一次运算就能得出答案 。
    【java数据结构基础:算法】如果让你加到一亿呢?你想想哪种效率会更高 。
    算法定义算法这个词最早是提出在公元825年的一个叫阿勒·花剌子的一个波斯数学家写的《印度数字算术》里面 。
    目前来说,普遍的定义就是:
    算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作
    刚才的问题我们也看了,对于一个问题可以有多个方法解除答案 。那么问题来了,有木有通用的算法?
    这个答案其实就和你去医院买药一样,请问有没有能治所有病的药答案一样 。
    算法的特性
    算法具有五个特性:输入、输出、有限、确定、可行
    输入输出
    这个比较好理解 。算法具有零个或者多个输入 。
    有穷性
    指的是算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成 。
    当然,这里的有穷指的是在实际意义中合理的 。
    可行性
    算法的每一步都是必须可行的,也就是说,每一步都能通过执行有限次数完成 。

    算法设计的要求刚才我们说过,算法并不是唯一的 。那我们在处理一个问题的时候,就必须要事先设计好算法才去解决问题 。
    正确性
    算法的正确性是指算法至少应该具有输入和输出和加工厂处理无歧义性、能正确反映问题的需求、能狗得到问题得正确答案 。
    可读性
    算法设计的另一目的就是为了方便阅读,理解和交流
    你说你写一个很牛逼的代码,别人看不懂,,,怎么去承认你牛逼呢是不是
    健壮性
    当输入数据不合法时,算法也能做出相应的处理,而不是产生异常或者莫名奇妙的结果
    时间效率高和存储量低
    算法设计应该尽量满足时间效率高和存储量低的特点
    这一点我迟迟没有达到 。。。。
    算法效率的度量方法算法的效率指的就是算法的执行时间 。那我们怎么去算一个他的执行时间呢?
    最简单的方法其实就是用计算机的计时功能来计算不同算法的效率是高是低 。
    事后统计法

    推荐阅读