算法和数据结构

数据结构就是数据的堆放方式(data structure)
(数据的组织、管理和存储格式) 目的 高效地存储和修改数据

算法就是计算的过程。

算法和数据结构相辅相成 数据结构是算法的基础
例子:排序算法中的堆排序,利用二叉树堆这样的数据结构。
缓存淘汰法LRU(Least Recently Used)最近最少使用。利用的哈希链表

衡量算法的两大标准是时间复杂度和空间复杂度
(通俗的讲就是代码运行完成所需要的时间和所占用的内存)
(时间复杂度就是执行程序的时间成本,空间复杂度就是执行程序的空间成本)

T(n)=3n 线性关系(时间复杂度)(执行完n次动作需要的时间) T(n) = O(n)
T(n)= 5n^2 T(n)= O(n^2)

用整数当key,使用次数当value,这样的数据结构叫做散列表(数据在内存中的存在形式)

空间复杂度
S(n)=O(f(n))

空间复杂度和时间复杂度是可以相互权衡的 多个数找重复数 时间是O(n^2)
空间是 O(n^2)(使用散列表)

算法是一系列程序指令,用来处理特定的运算和逻辑问题。

数据结构包括 数组 链表 (线性的数据结构)
树、图这样复杂的数据结构

数组和链表可以看作数据存储的“物理结构”

物理结构是人的肉身,逻辑结构是人的思想和精神.

栈: 它是一种线性的数据结构,就像一个放入乒乓球的圆桶,栈中的元素只能先入后出.
(保持先进后出的原则) 最早进入的叫做栈底,最后进入的叫做栈顶.

队列:队列就像隧道一样,是先进先出的.

循环队列可以解决普通队列容量不断减小的问题.

栈是先进后出 队列是先进先出 双端队列的数据结构结合了两个的优点.

优先队列不是先进先出,而是根据优先级来进行队列的控制.

散列表本质上也是一种数组(key value),(需要一个中转站 哈希函数)

在java中每一个对象都有自己的hashcode
index=hashcode(key)%Array.length (算出索引)

哈希冲突是不可避免的,我们有两种方式解决问题,一种是开放寻址法,一种是链表寻址法.

开放寻址法是遇到冲突就往后找一位,直到找到空的位置即可

链表寻址法":是冲突的位置和其它位置其实也是一个链表的头,来了冲突就插入对应的链表.

链表的扩容:
Capacity:是Hashmap当前的长度.
loadfactor:是hashmap的负载因子,默认值为0.75f

当hashmap.size>=Capacity*loadfactor
就要扩容.
扩容是创建一个entry的空数组,把原来hash的数据复制过来.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值