【 基础知识】轻松实现基本数据结构、时间复杂度、加权有向图,加权无向图的最短路径算法、排序算法等

程序的空间复杂度与时间复杂度

程序的空间复杂度与存储有关
时间复杂度与算法次数有关, 是最差情况下大致的程序运行次数。程序运行时间 = 时间复杂度 * 一次运算所需要的时间 。
时间复杂度写法O(n)
n次运算的复杂度是O(n)
二分查找的时间复杂度是 O(log n) 就是求以2为底,n的对数 ,比如log2 8 = 3,因为2的3次幂等于8 (log n = log2 n = (2的x次幂 = n) = x ,)

排序算法

排序算法,存在的意义在于提升搜索效率,或满足某些搜索方式的基础条件。

选择排序法

时间复杂度:O(nn)
不断的对比集合中的元素,依次取出最大/最小的元素,按顺序放入一个新集合中。
例子:有1-100的随机排列的集合,需要按从小到大的顺序排列。第一次对比,取出其中最小的元素1,放入新的集合第一位,然后第二次对比,取出剩余集合中最小的元素2,放入新的结合第二位…

查找算法

数据存在的意义,就是为了被查询。查找算法是重要的基础。

普通查找

时间复杂度 :O(n)
普通查找就是按顺序一个一个的找。也就是傻找。
如果一个集合有n个元素,那么查找到指定元素的最坏次数是n次。 复杂度表示为O(n)
例子:在100个元素中查找指定的元素。如果运气好,第一个就能找到,复杂度为O(1),运气不好第100个才找到,复杂度为O(100)

二分查找

时间复杂度:O(log n)
二分查找是每次都从当前集合的中间取一个元素来比较大小,每次都会淘汰一半的比较集合。
二分查找效率明显,被搜索元素所在的集合越大,查询效率越高。但二分查找只适合有序集合,比如1-100,a-z,乱序无法直接使用,需要先排序。二分查找的
例子:在1,2,3 …100的集合中查找79,先取1-100中间数 =50 与75比较,再取50与100中间数 = 75 与75比较。直到结果相等.

二叉树查找

时间复杂度 :插入、查找、删除O(log n)

数据结构

数据结构,为了满足算法而存在的一种数据关系。

数组

特点:数组可以在内存中存储连续的多个元素的结构,通过数组下标进行访问,下标从0开始。
优点:按索引查询和遍历比较快,
缺点:无法扩容,添加删除比较慢因为要移动其他元素,只能存储一种元素。
时间复杂度:
读取:O(1)
添加:O(n) 因为要移动其他元素
删除:O(n)

链表

特点:链表是非顺序非连续的结构,数据的逻辑顺序是根据指针地址实现的,每个元素包含两个节点,一个是存储数据的内存,另一个是指向下一个节点地址的指针。链表包含单向,双向,循环链表。
优点:链表并不要求内存地址连续排列,因此拥有很好的扩展性,
缺点:当想搜索某个元素时,并不能直接到达该内存位置,而必须从第一个元素依次查找直到指定位置,因为链表的内存地址都记录在上一个元素里面。由于要存储下一个内存地址,所以空间要求大
时间复杂度:
读取:O(n) 查找元素需要遍历所以非常耗时
添加:O(1) 添加删除只是改变指针地址,所以速度很快。
删除:O(1)

特点:先进后出。栈是一种线性表,只能在一端操作,就像一个杯子只能从上进出。加入数据是进栈,取数据是出栈。
优点:符合先进后出的顺序操作需求

队列

特点:先进先出。队列与栈不同,像买票排队一样,一头进,另一头出。
优点:符合先进先出的顺序操作需求

特点:不需要初始化,可以任意加减元素,,但因为包含大量指针所以占用空间较大。。

树是一种有层次关系的集合。就像一树根一样。
树状结构,最大的用途在于方便查找。在数据的增删改时,保持目标树结构的基本规则,即可方便使用诸如2分查找的方法定位数据地址。
树包括二分树,平衡树,红黑树b+ b* avl等
二分树的复杂度最坏情况为O(n)
红黑树的复杂度为O(log n)

散列表(哈希,字典等,arrylist,hashtable等等)

特点:散列表的数据以键值对形式出现,一个键名映射一个内存地址。散列表是十分方便的数据结构,目前高级语言都有它的身影。
优点:速度快,kv形式方便逻辑使用。
缺点:不适合存储过多数据
时间复杂度:
添加删除读取都是 O(1)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千年奇葩

从来没受过打赏,这玩意好吃吗?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值