数据结构……时间复杂度

1.数据结构:对大规模数据进行一个合理的规划,提高操作的效率

2.时间复杂度:描述算法的运行时间

假设算法要处理的数据总量时x,x足够大,算法为了达到某个目的 消耗的计算次数时y

(1)y=ax+b  x足够大等价于y=x  时间复杂度O(n)

(2)y=ax^2+bx+c  x足够大等价于 y=x^2 时间复杂度O(n^2)

(3)y=a  x足够大等价于y=1 时间复杂度O(1)

(4)a^y=x  y=logax a>=2  时间复杂度O(logn)

快慢 O(1) O(logn) O(n) O(n^2) (理想时间复杂度是前两个)

3.练习:

一.在长度为x的无序数组中找一个数据a,求时间复杂度 

解:a在第一个比较一次结束,在第二个比较两次结束,在第三个比较三次结束……在x个比较x次, 求平均 y=x/2 时间复杂度O(n)

二.求1+2+3+4+……+n的值

解:法一:循环依次获取每一个数据,与sum做加法 计算次数y=x  O(n)

法二:等差数列套公式sum=(1+x)/2   y=1  O(1)

三.冒泡排序:(将无序数组变成有序数组,前后两两数据进行比较,让小的数据往前走,大的数据往后走,一轮结束之后最大的数据到达正确位置)

解: 第一轮比较x-1次

 第二轮比较x-2次

 第三轮比较x-3次

 ……

 第k轮运算1次

 y=1+2+3+……x-1 =(1+x-1)*(x-1)/2    y=x^2     O(n^2)

四.二分查找法在有序数组中查找数据(left mid right)

 第一轮left和right之间有x(x/2^0)个数据比较一次,

 第二轮left和right之间有x/2(x/2^1)个数据比较一次,

 第三轮left和right之间有x/2/2(x/2^2)个数据比较一次,

 第四轮left和right之间有x/2/2/2(x/2^3)个数据比较一次

 ……

 第k轮left和right之间有 x/2^(k-1)个数据比较一次

 2^(k-1)=x   k=log2x   比较log2x次    O(logn)

4.小技巧快速判断时间复杂度:

确定数据规模,直接对问题规模下手 遍历O(n) 循环减半O(logn)  k层循环O(n^k)

5.无序数组存储数据O(n) ……降低时间复杂度 ……有序数组存储数据O(logn)

 经历排序过程(时间复杂度为O(n^2) O(nlogn))

 用数组通过某一算法决定数据要存储的位置

 利用下标num%arr.length……O(1) 问题:两个不同数据计算出来在同一个位置(哈希冲突)

 解决:1.加入链表(链表不长O(1),链表很长O(n)) 2.利用有序二叉树降低时间复杂度

 树:(二叉树 一个节点最多分出两个叉 和多叉树 一个节点可以分出多个叉)

 有序二叉树(节点左边的数值比当前节点小,节点右边的值比当前节点大)(不稳定)

 时间复杂度:

  第一层 1个数据

  第二层 2个数据

  第三层 4个数据

  第四层 8个数据

  ……

  第k层 2^(k-1)个数据

  2^0+2^1+……+2^(k-1)=x   k=log2x 

  时间复杂度为O(logn)

  练习构建有序二叉树:5 7 4 2 0 3 1 6

平衡二叉树(节点左边的数值比当前节点小,节点右边的值比当前节点大)(一个结点的左右子树的高度差绝对值不超过一)

四种旋转:RR RL LL lR

 练习构建平衡二叉树 5 7 4 2 0 3 1 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值