1、什么是算法
算法(algorithm,[ˈælɡərɪðəm],计算程序):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。
mark:我们可以把所有的算法想象为一本“菜谱”,特定的算法比如菜谱中的的一道“老醋花生米”的制作流程,只要按照菜谱的要求制作老醋花生米,那么谁都可以做出一道好吃的老醋花生米。so,这个做菜的步骤就可以理解为:“解决问题的步骤”
2、算法的意义
假设计算机无限快,并且计算机存储容器是免费的,我们还需要各种乱七八糟的算法吗?如果计算机无限快,那么对于某一个问题来说,任何一个都可以解决他的正确方法都可以的!
当然,计算机可以做到很快,但是不能做到无限快,存储也可以很便宜但是不能做到免费。
那么问题就来了效率:解决同一个问题的各种不同算法的效率常常相差非常大,这种效率上的差距的影响往往比硬件和软件方面的差距还要大。
据了解很多大厂技术面试的要求是:技术要好,计算机基础扎实,熟练掌握算法和数据结构,语言不重要,熟练度很重要。每一轮技术面试都可能考代码,不只考算法,但一定会考算法。
如何学习算法?
为了帮助大家学好算法,小编厚着脸皮找字节跳动面试官要了两份超级nice的算法面试笔记,现在免费分享给大家
数据结构与算法笔记
这份笔记内容全部都是纯手打,排序算法/数据结构的代码可能不是最优解,代码的实现都是以⽐较容易理解的⽅式去写的。⼏乎每句代码都有对应的注释,应该是能看懂的。
六、希尔排序
七、堆排序
左神《程序员代码面试指南》
书籍涉及算法与数据结构编程题目240道以上,并且个人实现出最优解,大部分题目为面试高频。
目录(算法分为将、校、尉、士四个等级来表示难易程度)
第4章递归和动态规划
裴波那契系列问题的递归和动态规划(将★★★★)
矩阵的最小路径和(尉★★)
换钱的最少货币数(尉★★)
换钱的方法数(尉★★)
最长递增子序列(校★★★)
汉诺塔问题(校★★★)
最长公共子序列问题(尉★★)
最长公共子串问题(校★★★)
最小编辑代价(小★★★)
字符串的交错组成(校★★★)
龙与地下城游戏问题(尉★★)
数字字符串转换为字母组合的种数(尉★★)
表达式得到期望结果的组成种数(校★★★)
排成一条线的纸牌博弈问题(尉★★)
跳跃游戏(士★)
数组中的最长连续序列(尉★★)
N皇后问题(校★★★)