数据结构与算法学习笔记(一)

什么是数据结构?什么是算法?

简单的讲,数据结构即存储数据的方法,算法即查找这些特定存储结构的方法。举个例子,图书管管理员一般会按特定的编号将书籍摆放在特定的位置,按照一定的编号这就是“书籍”这种数据的存储结构,而我们如何查找到特定的书籍就是获取“书籍这种数据的算法”。

数据结构和算法的关系可以用一句话来简单的概括,数据结构是为算法服务的,算法是作用在特定的数据结构之上的,因此数据结构和算法不能单独孤立的来谈,他们是相辅相成的。

数据结构与算法知识点图

数据结构与算法知识点概括图

一般工作与生活中常用的10个数据结构和10个算法

10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;

10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

复杂度分析

复杂度分析主要分为时间复杂度分析和空间复杂度分析。

大O复杂度表示法

大O复杂度表示法表示代码执行时间随数据量增长的变化趋势,所以也叫渐进时间复杂度,简称时间复杂度。

1.我们在分析一个算法、一段代码的时间复杂度的时候,只关注循环执行次数最多的那一段代码就可以了。

2. 加法法则:总复杂度等于量级最大的那段代码的复杂度。

3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

复杂度量级划分

复杂度量级划分图

   复杂度量级,我们可以粗略地分为两类,多项式量级和非多项式量级。其中,非多项式量级只有两个:O(2n) 和 O(n!)。

空间复杂度

  空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。

复杂度分析常用的几种分析方法:

最好情况时间复杂度分析、最坏情况时间复杂度分析、平均情况时间复杂度分析、均摊时间复杂度分析

最好情况时间复杂度分析即程序在最理想情况下的时间复杂度,最坏即程序在最坏情况的时间复杂度。

平均情况则是考虑每种情况发生的概率计算出程序的平均时间复杂度。求出的值就是概率论中的加权平均值,也叫作期望值,所以平均时间复杂度的全称应该叫加权平均时间复杂度或者期望时间复杂度。

均摊时间时间复杂度分析一般也称摊还分析法,对一个数据结构进行一组连续操作中,大部分情况下时间复杂度都很低,只有个别情况下时间复杂度比较高,而且这些操作之间存在前后连贯的时序关系,这个时候,我们就可以将这一组操作放在一块儿分析,看是否能将较高时间复杂度那次操作的耗时,平摊到其他那些时间复杂度比较低的操作上。而且,在能够应用均摊时间复杂度分析的场合,一般均摊时间复杂度就等于最好情况时间复杂度。可以简单的认为均摊时间复杂度分析就是一个特殊的平均时间复杂度分析。

你可能感兴趣的:(数据结构与算法学习笔记(一))