算法学习 (一)

也许只是在知乎闲逛心血来潮的看到了这篇文章 怎么学算法,突然意识到自己算法方面的薄弱。大学学习的就是计算机方面的专业,但是不管是C,C++,都没好好学过,更别说算法了,虽然我现在从事iOS开发~,从最开始入职工作,到意识深度学习提升个人价值,再到各类面试的问题,算法总是有围绕在身体,但是我从来都是刻意的去回避这些问题,导致我现在最基础的算法我都不能够很好应付。
年前看了 怎么学算法 之后,我毅然决然的买了两本算法书,《算法》(第四版),《算法导论》,我从《算法》开始,很多人都这个能为之后看算法导论打下一定基础(毕竟我的基础太差)。因为我的自律性一直不太好,以此记录,来督促自己保持学习的习惯。并且能够有所得,而不是吃了又吐回去。

算法

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度时间复杂度来衡量。

特征

一个算法应该具有以下五个重要的特征:

有穷性

(Finiteness)

算法的有穷性是指算法必须能在执行有限个步骤之后终止;

确切性

(Definiteness)

算法的每一步骤必须有确切的定义;

输入项

(Input)

一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;

输出项

(Output)

一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;

可行性

(Effectiveness)

算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。

要素

一,数据对象的运算和操作:计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,成为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类:

1,算术运算:加减乘除等运算

2,逻辑运算:或、且、非等运算

3,关系运算:大于、小于、等于、不等于等运算

4,数据传输:输入、输出、赋值等运算

二,算法的控制结构:一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。

评定

同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度空间复杂度来考虑。

时间复杂度

算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。

T(n)=Ο(f(n))

因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。

空间复杂度

算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。

正确性

算法的正确性是评价一个算法优劣的最重要的标准。

可读性

算法的可读性是指一个算法可供人们阅读的容易程度。

健壮性

健壮性是指一个算法对不合理数据输入的反应能力和处理能力,也称为容错性


基础部分

一.数据结构
主要学习了三种基础的抽象数据类型:背包、队列、栈。以及使用链表实现背包、队列、栈。

//基础 创建链表
class Node: NSObject {
    var item:Any?
    var next:Node?
    
}

//背包
class STBag: NSObject {
    fileprivate var first:Node?
    fileprivate var count:Int = 0
    
    public func add(_ item:Optional<Any>){
        if (first != nil)
        {
            let oldfirst = first
            first = Node.init()
            first!.item = item as AnyObject
            first!.next = oldfirst
        }
        else
        {
            first = Node()
            first?.item = item as AnyObject
        }
        count = count+1
    }
  
    func isEmpty() -> Bool {
        return count != 0
    }
    func size() -> Int {
        return count
    }
    
}

//栈
class STStack: NSObject {
    fileprivate var first:Node?
    fileprivate var count:Int = 0
    
    public func push(_ item:Optional<Any>){
        if (first != nil)
        {
            let oldfirst = first
            first = Node.init()
            first!.item = item as AnyObject
            first!.next = oldfirst
        }
        else
        {
            first = Node()
            first?.item = item as AnyObject
        }
        count  = count+1
    }
    
    public func peek()->Optional<Any>{
        return first?.item
    }
    
    
    
    public func pop() -> Any?{
        if (count>0)
        {
            let item = first?.item
            first = first?.next
            count = count - 1
            return item
        }
        else
        {
            return nil
        }
    }
    
    public  func isEmpty() -> Bool {
        return count != 0
    }
    public func size() -> Int {
        return count
    }
    
}
//队列
class STQueue: NSObject {
    fileprivate var fisrt:Node?
    fileprivate var last:Node?
    fileprivate var count:Int = 0
    
    public func enqueue(_ item:Optional<Any>){
        if (count != 0){
            let oldlast = last
            last?.item = item
            last?.next = nil
            oldlast?.next = last
            count = count + 1
        }
        else{
            let itemNode = Node()
            itemNode.item = item
            last = itemNode
            fisrt = last
            count = count + 1
        }
        
    }
    
    public func dequeue()->Node?{
        if (count != 0){
            let item = fisrt?.item
            fisrt = fisrt?.next
            count = count - 1
            return item as? Node
        }
        else {
            last = nil
            return nil
        }
        
        
    }
    
    
    public  func isEmpty() -> Bool {
        return count != 0
    }
    public func size() -> Int {
        return count
    }
    
}

二.算法分析

  1. 科学方法
  • 细致观察特点,经过精确的测量
  • 根据观察结果提出假设模型
  • 根据模型预测未来的时间
  • 继续观察并核实预测的准确性
  • 反复知道确认预测和观察一致
  1. 观察
  • 计时器
  • 实验数据分析
  1. 数学模型
  • 执行每条语句的耗时
  • 执行每一条语句的频率
  1. 增长数量级的分类
  • 常数级别
  • 对数级别
  • 线性级别
  • 线性对数级别
  • 平方级别
  • 立方级别
  • 指数级别

也许不是每天记录一堂算法学习记录,一定会以高频率的方式记录总结实践学习到知识
Demo地址:https://github.com/StoneAi/Algorithms
持续更新

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

推荐阅读更多精彩内容

  • 不孝有三,无后为大,古往之今,女人结婚生小孩那是肩负重任,也是情理之中。 在中国重男轻女的封建思想很普及,如果女人...
    花好月圆_c576阅读 849评论 15 15
  • 诗/许溪墨 十年蓦然回首 谁叹一纸婚书 多少悲欢 不及你温言 清茶几盏 解我之怨 推砚绘流年 忘却别离辛酸 执念深...
    许溪墨阅读 303评论 0 13
  • (2017-08-23-周三 20:34:58) ①想法仅有一个附件,直接打开。 ②多个附件,在“选择要打开的附件...
    菜五阅读 171评论 1 0
  • 不知不觉写了应该快有一个月的反思了。其实觉得还是挺好的。当自己一天没有花时间在自我成长上,就感到有负罪感。每天总想...
    则成思考888阅读 109评论 0 0