数据结构(2)

哈希表

1.相关概念
Hash一般翻译为“散列”,直接音译为“哈希”。
简单的将就是一种将任意长度 的消息压缩到某一固定长度的消息摘 要的函数。

有散列函 数都有如下一个基本特性:根据同一散列函 数计算 出的散列 值如果不同,那么输入值肯定也不同。但是,根据同一散列函 数计算 出的散列 值如果相同 ,输入值不一定相同。

在Ja va中任意一个对象都有一个hashCode()方法,可以获取任意一个对象的hash值。
publicnative int hashCode();

2.哈希冲突

当两个不同的输入值,根据同一散列函 数计算 出相同 的散列 值的现象,就把它叫做碰撞(哈希碰撞)。

3.散列算法

散列 法Hashing是一种将字符组成 的字符串转换为固定长度( 一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。
由于通过更短 的哈希 值比用原始 值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。

String类型的定义

public final class Stirng
implements java.io.Serializable,Comparable<String>,CharSequence{}

具体的字符串值是采用char[]进行存储 ,而且一旦创 建则不能修改。真正的修改操作都会引发对象的新建.

String类型中的hashCode方法的实现:

public int hashCode(){
int h = hash ;
if(h == 0 && value.length>0){
char val[] = value;
for(int i=0;i<value.length;i++){
h = 31* H + val[i];
}
hash = h;
}
return h;
}

二叉树

二叉 搜索树(Binary Search Tree,简称 BST),BST是一种很常用的的二叉 树。它的定义是:一个二叉 树中,任意节点的值要大于等于左子树所有节点的值,且要小于等于右边子树的所有节点的值。
主要针对链 表的插入和删除 很快 ,但是是查找数据却很慢 的特点 。树状结构最大的优势 在于查找,但是插入和删除的效率都不太高。

public class Node{
private Object data;  //结点数据
private Node left     //左子节点的引用
private Node right    //右子节点的引用

1.二叉树的特点:
左子树上所有结点的值均小于或等于它的根结点的值
右子树上所有结点的值均大于或等于它的根结点的值
左、右子树也分别为二叉排序树。

2.二叉树的遍历

中序遍历:左子树——》 根节点——》右子树
前序遍历:根节点——》左子树——》右子树
后序遍历:左子树——》右子树——》 根节点

二叉树在极端情况下会退化为链表结构,为了避免出现这个问题,引入平衡树AVL 树是一种平衡二叉树,平衡二叉树递归定义如下:
左右子树的高度差小于等于1。
其每一个子树均为平衡二叉树。
AVL树引入了所谓监督 机制,就是在树的某一部分的不平衡 度超 过一个阈值后触发 相应 的平衡操作。保证树的平衡度在可以接受的范围内。

public class TreeNode{
int val;
int height;  //多加了一个高度,用来记录每个节点的高度
TreeNode left;
TreeNode right;
TreeNode(int x){
val = x;
}}

3.红黑树

红黑树 是一种近似平衡 的二叉 查找树 ,查找、删除 、插入都快,树经常 需要进行旋转达到平衡,但是平衡算法很复杂。

红黑树特征:
(1)每个节点不是红色就是黑色的;
(2)根节点总是黑色的;
(3)如果节点是红色的,则它的子节点必须是黑色的(反之不一定),(也就是从每个叶子到根的所有路径上不能有两个连续的红色节点);
(4)从根节点到 叶节 点或空子节点的每条路径,必须包含相同数目的黑色节 点( 即相同 的黑色高度).

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值