算法

来源:开发者应该掌握的几种排序算法 - 简书

来源:ios面试数据结构与算法 - CSDN博客

首先要知道一个算法的好坏主要是从算法的时间复杂度、空间复杂度和稳定性来衡量。

实际上把求解问题的关键操作,如加减和比较运算指定为基本操作,然后把算法执行基本操作的次数作为算法的时间复杂度,而算法执行期间占用的存储单元的数量成为算法的空间复杂度。

一个算法的时间耗费就是该算法钟所有语句的频率值和(记做T(n))。当问题规模n无穷大时,T(n)的数量级成为时间复杂度,记做T(n)=O(f(n))

常见的 时间复杂度有O(1)叫常数阶,O(n)叫做线性阶,O(n^2)叫做平方阶 

1、常数阶

执行的次数都是恒定的,不会随着n的变化而变化,所以单纯的分支接受,其时间复杂度也是O(1)。

2、线性阶

线性阶最具典型的例子就是迭代。例如遍历数组的中的每一个元素。整个遍历过程总时间和数组的长度呈正比(线性增长)。

3、对数阶

var count =1 

while count < n {            

count = count *2

}

上述代码中不难法相,当count大于等于n的时候,整个循环就结束了。可以看出再次之前,循环执行次数符合:2^x=n这个公式,x=log2n。所以上述代码的时间复杂度为O(logn)。

4、平方阶

平方阶就不做过多解释,简单想象for循环嵌套for循环便理解了。


冒泡排序 - 简书

选择排序 - 简书

插入排序 - 简书

快速排序 - 简书

归并排序 - 简书

二分查找 - 简书

希尔排序 - 简书





五 堆排序 

 是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;或者每个节点的值都小于或等于其左右孩子结点的值称为小顶堆。

来源:图解排序算法(三)之堆排序 - dreamcatcher-cx - 博客园

堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了

图解:图解排序算法(三)之堆排序 - dreamcatcher-cx - 博客园

六 哈夫曼树


又称最优二叉树,是指一组带有确定确定权值的叶子节点所构造的确有带全路径长度最短的二叉树,聪树中的一个结点到另一个结点之间的分支构成了两结点之间的路径,路径中的分支个数成为路径长度,二叉树的路径长度是指由根节点到所有叶子节点的路径长度之和。





七 Hash算法

哈希算法详解(附带 iOS 开发中实际应用) - 简书

Hash表采用一个映射函数 f :key —> address 将关键字映射到该记录在表中的存储位置,从而在想要查找该记录时,可以直接根据关键字和映射关系计算出该记录在表中的存储位置,通常情况下,这种映射关系称作为Hash函数,而通过Hash函数和关键字计算出来的存储位置(注意这里的存储位置只是表中的存储位置,并不是实际的物理地址)称作为Hash地址。比如上述例子中,假如联系人信息采用Hash表存储,则当想要找到 “lisi” 的信息时,直接根据 “lisi” 和 Hash 函数计算出 Hash 地址即可。

 Hash 表的优缺点及注意点

优点

哈希表的效率非常高,查找、插入、删除操作只需要接近常量的时间即0(1)的时间级。如果需要在一秒种内查找上千条记录通常使用哈希表,哈希表的速度明显比树快,树的操作通常需要O(N)的时间级。哈希表不仅速度快,编程实现也相对容易。如果不需要遍历数据,不二的选择。

缺点

它是基于数组的,数组创建后难于扩展。有些情况下,哈希表被基本填满时,性能下降得非常严重,所以开发者必须要清楚表中将要存储的数据量。或者也可以定期地把数据转移到更大的哈希表中,不过这个过程耗时相对比较大。

注意点

在设计Hash算法的时候。一定要保证相同字符串产生的 Hash 值相同,同时要尽量的减小Hash冲突的发生,这样才算是好的 hash 算法。

iOS系统API给我们提供一个自动过滤重复元素的容器 NSMutableSet/NSSet,如:当我们向该实例对象中添加字符串时,如果重复添加两个相同的字符串,集合中只会保留一个

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,323评论 0 1
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一...
    阿里高级软件架构师阅读 3,277评论 0 19
  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an 输...
    code武阅读 650评论 0 0
  • 院雕力量 运玉为物 留时印痕 太湖石系列 2014年到山西平遥写生,艺术家张文静在一个公园看到了一座太湖石孤零零的...
    腾玉空间阅读 688评论 0 2
  • 2017.10.26 班级:17助产 主题:总结性班会 地点:教室 成员:17助产全体成员,班主任单蕾演讲 开学...
    卫校一七助产阅读 144评论 0 0