数据结构与算法(四)

  • 二分查找:也叫折半查找算法。主要针对一个有序的数据集合,查找思想类似分治思想,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素。
  • 时间复杂度时间复杂度:o(log n);
  • 1.数据序列元素不重复;
import java.util.Arrays;

public class SimpleBinarySearch {
    public static int binarySearch(int[] array ,int value){
        int low = 0;
        int high = array.length-1;
        while (low<=high){
            int mid = (low+high)/2;
            if (array[mid]==value){
                return mid;
            }else if (array[mid]<value){
                low = mid+1;
            }else {
                high = mid-1;
            }
        }
        return -1;
    }
    public static void main(String[] args ){
        int[] array = new int[10];
        array[0] = 1;
        array[1] = 5;
        array[2] = 7;
        array[3] = 11;
        array[4] = 25;
        array[5] = 37;
        array[6] = 41;
        array[7] = 55;
        array[8] = 57;
        array[9] = 65;
        System.out.println(Arrays.toString(array));
       int i = binarySearch(array,25);
        System.out.println("找到了目标元素的下标"+i+"---对应的值是" + array[i]);
    }
}
  • 2.元素重复(取第一个值)
 if (array[mid]==value){
                if (mid==0||array[mid-1]!=value){
                    return mid;
                }else {
                    high = mid  -1;
                }
  • 3.元素重复取最后一个值:
if (array[mid]==value){
                if (mid==high||array[mid+1]!=value){
                    return mid;
                }else {
                    low = mid +1;
                }
  • 散列表:又叫哈希表/Hash表,根据键(Key)直接访问在内存存储位置的数据结构,是由数组演化来的,利用了数组支持按照下标进行随机访问数据的特性。

  • 散列函数是一个函数方法,能够将给定的key转换为特定的散列值,可以表示位 hashValue=hash(key)

  • 散列冲突:两个不同的关键值(key)由于 散列函数值 相同,因而被映射到同一表位置上。

  • 解决方案:

  • 1.开放检测法:一旦出现了散列冲突,就重新去寻址一个空的散列地址

  • 2.链表法:数组每个位置对应一个链表,所有散列值相同的元素都可以放到对应的链表中。

  • 哈希算法:可以将任意数据通过一个函数转换成长度固定的数据串,即一个映射转换的规则

  • 树:由n(n>0)个有限节点组成一个具有层次关系的集合;

  • 节点的高度:节点到叶子节点经过的边数
    节点的深度;根节点到该节点所经历的边的个数
    节点的层数:节点的深度+1

  • 二叉树:每个节点最多2个子节点

  • 满二叉树:叶子结点全在最低层,除了叶子结点之外,每个节点都有2个子节点

  • 完全二叉树:叶子结点全在最底下2层,最后一层叶子节点都靠左排列
    并且除了最后一层,其它层的节点个数都达到最大(由存储结构决定)

  • 二叉查找树的特点:
    1.左子树所有值小于根节点
    2.右子树所有值大于根节点
    3.任意节点的左右节点也分别为二叉查找树
    4没有键值相等的节点

  • ALV(平衡二叉树)
    1.可以是空数
    2.任何一个节点的左子树与右子树都是ALV 并且高度差的绝对值小于1;

  • 堆:
    1.堆是一个完全二叉树
    2.堆中每一个节点的值都必须大于等于(小于等于)其子树中每个节点的值

  • 图:图中的每一个元素称为顶点;任意2顶点相连接称为边; 从某顶点出发延伸出的边数个数称为度 无向图、有向图 、权重、 带权图

  • 存储:
    1.邻接矩阵存储图主要依赖于二维数组:对于无向图,如果顶点i与顶点j之间有边,我们就将a[i][j]与a[j][i]标记为1 对于有向图:看箭头指向判断是否标记为1; 对于带权图:数组中存储相应的权重;

  • 2.邻接表(一维数组+链表)

    BFS 广度优先搜索 DFS深度优先搜索

  • 字符串匹配算法:indexOf(),starWith(),endWith() 单模式字符串匹配算法:BF(暴风)算法,是一种蛮力算法

  • RK算法:利用Hash算法

  • 贪心算法:在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是最好的算法;

  • 背包问题: 解题思路:1.用数学模型来描述问题
    2.把球节点问题分成若干个子问题
    3.对每一子问题求解,得到子问题的局部最优解
    4.把子问题的解局部最优解合成总解

  • B+树: 数据只保存在叶子里面,非叶子节点保存索引值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值