Swift算法-Big O notation

声明:算法和数据结构的文章均是作者从github上翻译过来,为方便大家阅读。如果英语阅读能力强的朋友,可以直接到swift算法俱乐部查看所有原文,以便快速学习。作者同时也在学习中,欢迎交流。

在编程过程中,了解一个算法的速度和消耗内存是非常有用的,它可以让你在不同的情况选择合适的算法。

通过大O符号可以让你对算法的运行速度和内存消耗有粗略的判断。当有人说:“这个算法比O(n^2)跑得慢,占用了O(n)的空间。”他们的意思是,这个算法有点慢,但是不需要太多额外的内存。

理解算法的大O符号通常是经过数学分析。这里我们不讨论数学,但是了解不同的值所代表的意思还是有必要的,如下图。N代表你在处理的数据总量。比如,排序一个含有100个元素的数组,n=100。

大0符号描述

通常情况下你不需要用数学推理去知道一个算法的大O,只需要简单的凭自觉。如果你的代码使用的是单一循环来查看所有的输入数据,那这个算法就是O(n)。如果你的代码使用的是两层嵌套循环,那这个算法就是O(n^2)。三次嵌套循环就是O(n^3),以此类推。

必须注意大O符号只是一个大致判断,同时它只适合数据总量大的情况。比如,对于插入排序算法O(n^2)是属于运行时间较长的,理论上会比归类排序算法O(nlogn)来的更久。但是在小数据总量的时候,插入排序算法却比归类排序算法更快,特别是当数组已经是部分排序好的情况下!

如果你感觉很迷惑,请不要让大o符号困扰你太多。在对比两个算法的优劣时候它是非常有用的!重点是要不断的去尝试。当然,在数据总量很小的时候,即使是实际应用,一个糟糕的算法也可以取得不错的效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,743评论 0 15
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,220评论 0 52
  • 小兵喜欢的女孩子跟他说她希望有一天她的婚礼能在法国最大的教堂举行,穿上高级定制的婚纱,捧着来自荷兰的蓝玫瑰。自那天...
    cmn_f838阅读 294评论 0 0