数据结构-计组

Dijsktra

  1. 是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。
  2. 采用广度优先的贪心算法

Floyd

  1. 解决任意两点间最短距离,时间复杂度O(n3)
  2. 不能处理负权回路

Hash算法

hash表

选择一个表,最常用的是取余数法,二次探测法

二进制数值表示

原码不说了

反码,正数等于原码,负数除了符号位,其他位取反

补码,正数等于原码,负数除符号位,其他位取反再在末尾加1

8位二进制原码的表示范围:-127~+127 =254
8位二进制反码的表示范围:-127~+127 =254
8位二进制补码的表示范围:-128~+127 =255
n位二进制原码和n位二进制反码:-2^(n-1)-1~+2^(n-1)-1;n位二进制补码:-2^(n-1)~+2^(n-1)-1

原码中0有两种表示:

+0:0000 0000  -0:1000 0000

反码中0有两种表示:

+0:0000 0000  -0:1111 1111

在补码中只有一种表示:
0000 0000

哈夫曼树

https://blog.youkuaiyun.com/xueba8/article/details/78477892#commentBox

先对权重列表从小到大排序

完美二叉树(满二叉树)

完全二叉树

完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。

叶子节点数等于ceil(节点总数n/2)

完满二叉树

所有非叶子结点的度都是2(只要你有孩子,你就必然是有两个孩子) 。

二叉查找树

二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树

可以是空树

就是左边小于根,右边大于根

二叉平衡树

有相同节点的二叉查找树可以有不同的形态,而二叉查找树的平均查找长度与树的深度有关,所以需要找出一个查找平均长度最小的一棵,那就是平衡二叉树

所以他首先是个二叉查找树,其次他的左右平衡因子要保持为-1,0,1

最少节点数

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。

其中F(2) = 2, F(1) = 1;

故而:F(5)= 3F(2) + 2F(1) + 4 = 12.

由二叉排序树生成二叉平衡树

è¿éåå¾çæè¿°è¿éåå¾çæè¿°

例子是这位大佬的https://blog.youkuaiyun.com/qq_37934101/article/details/81160254,先拿着用用

左旋、右旋

三个节点都在一条线上,然后哪边缺,就往哪边旋。

根节点x的右孩子y的右孩子添加新元素了,左旋。

根节点x的左孩子y的左孩子添加新元素了,右旋。

右旋

根节点x的左孩子y的右孩子添加新元素了,先绕y左旋,在绕x右旋。

右左旋

根节点x的右孩子y的左孩子添加新元素了,先绕y右旋,在绕x左旋。

堆的构建、增加和删除

https://www.cnblogs.com/postw/p/9768331.html

优先队列

http://www.sohu.com/a/256022793_478315

哈夫曼编码

  1. 就是概率最小的先构成一个树,一点一点迭代,知道原条件的值都用完
  2. 编码平均距离就是每个编码值乘路径距离的和

进程与线程

进程

进程是程序执行的一次过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,进程有自己专有的地址空间,有五个状态,初始态,执行态,等待态,就绪态,终止态。

线程

线程是CPU调度和分派的基本单位,同一进程中的线程共享进程的资源,本身不能持有资源。

联系

一个线程只能属于一个进程;一个进程中存在多个线程,至少一个线程。轻量级进程。

区别

本质上进程是操作系统资源分配的基本单位;而线程是任务调度和执行的基本单位。

线程间通信

1:同步(synchronized)

2:共享变量(volatile)

2:wait/notify()机制

3:管道通信就是使用java.io.PipedInputStream 和 java.io.PipedOutputStream进行通信

进程间通信

https://blog.youkuaiyun.com/zhaohong_bo/article/details/89552188

  1. 管道:半双工(可以互传,但是每次只能一个方向)只允许有亲缘关系的进程使用。
  2. 消息队列:由消息的链表,存放在内核中并由消息队列标识符标识。
  3. 信号量:设置标志,防止不同进程同时访问。
  4. 共享内存:最快的方式,内存中的数据,所有进程都能访问。

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值