0
点赞
收藏
分享

微信扫一扫

【数据结构】前言部分

谁知我新 2022-04-29 阅读 103

        感觉快要秋招了,学的东西还是学完就忘,太难受了...

        感觉东西不能信手拈来,还是差点意思,例如数据结构或者STL容器这种。

        不如从头学起,学就完了!


        时间复杂度和空间复杂度,用来度量代码效率。

        我们编程就是产生应用的过程,为了解决问题,但是也要更好的、更优的去解决。

        围绕复杂度展开的问题:算法/数据结构的选择、代码效率提升、降低时空间复杂度。

        时间复杂度指的是:程序运行时代码执行次数

        计算复杂度:看循环的层数,以及变量的增幅,循环变化和终点。

        复杂度性质:

  1. 复杂度与具体的常系数无关
  2. 多项式级复杂度相加,把高次作为结果
  3. O(1)的含义是,某个任务通过有限可数的资源即可完成,与输入的数据量n无关

        其他结论:

  1.  一个顺序结构的代码O(1),就是即使是1000行那也是O(1)。
  2. 采用分治法的二分策略,O(logn)。
  3. 一个简单的循环O(n)。
  4. 两个顺序执行的循环:取最高项。
  5. 两个嵌套循环:O(n2)。

        可以用空间换时间,空间廉价,时间宝贵。要快!


        数据结构可以按照逻辑结构分类:

        主要是一对一、一对多、多对多。

        集合没逻辑,一对一的是线性结构,例如一维数组、栈、队列等,而一对多或多对多就是例如树和图,就属于是非线性结构。

        当然也可以按照存储结构分类,例如顺序、链式、索引、散列。

  1. 顺序就类似数组,空间连续。
  2. 链式就是链表,地址不连续,通过指针使其相连。
  3. 索引可以理解为目录,索引底层数据结构是B+树。B+树的优点是层数少,可以快速查找。缺点是插入速度慢。
  4. 散列英文hash,不连续存储,但是可以迅速找到,可以联想哈希表。 

        这两种分类并不是冲突,例如以数组存储的栈结构,那么它就是顺序存储的线性结构,我直接top指针加减就做到了入栈出栈。但是栈算是受限的结构。

        双向链表满足一对一,是线性结构,可以理解为:天生的就是单项链表,你的前后都定了,后天给你加上的反向,故,你还是一个一对一结构。

        数据结构主要是研究:增删查。


        小tips:

        ^的优先级低于+-号,并且表示异或,而并不是次方。

        可以通过异或来实现无需中间值的两者交换。

        并且,并不是长得奇怪的符号优先级就高...


        学!为什么不学!

举报

相关推荐

0 条评论