Day_50小结

news2024/11/17 9:47:08

目录

一. 比较和分析各种查找算法

二. 描述各种排序算法的特点和基本思想&比较分析各种排序算法

        1. 插入排序

        2. 交换排序

        3. 选择排序

        4. 外部排序

三. 设计一个自己的 Hash 函数和一个冲突解决机制

        1. 对于哈希函数的构造:

        2. 处理冲突的办法:

        3. 代码展示:


一. 比较和分析各种查找算法

        一般线性表的顺序查找:顺序查找对于顺序表和链表都适用,其基本思想就是通过对数字序列的递增顺序来扫描每个元素;若一直查找到序列的最后一个元素都没有找到需要查找的值则查找失败。

        有序线性表的顺序查找:本质上和一般线性表的查找是一样的,区别在于判断查找失败的时候如果需要查找的值已经大于现在表内节点的值(假定有序表按升序排列),则直接判定失败,稍微减少了查找失败的长度,提高了效率。

        折半查找:折半查找必须要在有序顺序表内进行(链表不行),每次取区间的中间值和需要查找的值进行判断,若中间值大于需要查找的值则修改右边界为中间值-1,若中间值小于需要查找的值则修改左边界为中间值+1,一直循环下去,直到找到查找的值,若一直没有找到需要查找的值则返回查找失败。

        哈希查找:哈希查找即根据需要查找的值,直接一步到位定位到这个值的存储位置,唯一需要进行考虑的冲突的情况。这里详见哈希查找。

二. 描述各种排序算法的特点和基本思想&比较分析各种排序算法

        描述各种排序算法的特点和基本思想:

        1. 插入排序

        直接插入排序:总共进行n-1轮排序,其基本思想是每次将一个待排序的记录按其关键字大小插入前面已排好序的子序列,直到全部记录插入完成。

        希尔排序:从直接插入排序改进而来,由于直接插入排序对于基本有序且少量元素的排序效率很高,所以希尔排序每一次只排少量有序元素(根据步长确定),多次少量的组合,其本质依然是插入排序,只不过是将一个大的数字序列分成了几部分小的数字序列。

        2. 交换排序

        冒泡排序:冒泡排序的基本思想是:从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换它们。直到序列比较完。我们称它为第一趟冒泡,结果是将最小的元素交换到待排序序列的第一个位置(或将最大的元素减缓到待排序序列的最后一个位置),关键字最小的元素如气泡一般逐渐往上“漂浮”直至“水面”(或关键字最大的元素如石头一般下沉至水底)。下一趟冒泡时,前一趟确定的最小元素不再参与比较,每趟冒泡的结果是把序列中的最小元素(或最大元素)放到了序列的最终位置...这样最多做n-1趟冒泡就能把所有元素排好序。

        快速排序:快速排序的基本思想是基于分治法的,在待排序表L[1...n]中任取一个元素pivot作为枢轴(或称基准),通过一趟排序将待排序表划分为独立的两个部分L[1...k-1]和L[k+1...n],使得L[1...k-1]中的所有元素小于pivot,L[k+1...n]中的所有元素大于或等于pivot,则pivot放在了其最终位置L(k)上,这个过程称为一次划分。然后分别递归的对两个子表重复上述过程,直到每部分内只有一个元素或为空为止,即所有元素放在了其最终位置上。

        3. 选择排序

        选择排序:每一趟(如第i趟)在后面n-i+1(i=1,2,3...n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,完成排序。

        堆排序:使用堆的元素下沉思想,即我先根据给定的数组序列构造一个堆,我每一次取根节点,并且将根节点删除(插入到最后一个位置),再对去掉根节点的数字序列构造一个堆;重复上述步骤即可得到最终的排序结果。

        4. 外部排序

        归并排序:归并排序与之前学习的基于交换、选择等排序的思想不一样,“归并”的含义是将两个或者两个以上的有序表合并成一个新的有序表。假定排序表含有n个记录,则可将其视为n个有序的子表,每个子表的长度为1,然后两两归并,得到n/2个长度为2或1的有序表;继续两两归并......如此重复,直到合成一个长度为n的有序表为止,这种排序方法称为2路归并。

        比较分析各种排序算法:

三. 设计一个自己的 Hash 函数和一个冲突解决机制

        1. 对于哈希函数的构造:

                这里采用除留余数法,p是最接近数字序列长度的质数。

        H(key)=key\%p

        2. 处理冲突的办法:

                这里采用拉链法处理冲突。

        3. 代码展示:

        主类:

package Day_50;

public class demo1 {
    public static void main(String[] args) {
        int [] paraKeyArray = new int[]{11,2,3};
        String[] paraContentArray = new String[]{"121","21","324"};
        HashArray test=new HashArray(paraKeyArray,paraContentArray);

        test.Hashtest();
    }
}

        调用类:   

package Day_50;

/**
 * Data array for searching and sorting algorithms.
 *
 * @author Jian An 2569222191@qq.com.
 */
public class HashArray {
    /**
     * An inner class for data nodes. The text book usually use an int value to
     * represent the data. I would like to use a key-value pair instead.
     */
    class DataNode {
        /**
         * The key.
         */
        int key;

        /**
         * The data content.
         */
        String content;

        DataNode Next =null ;

        /**
         *********************
         * The first constructor.
         *********************
         */
        public DataNode(int paraKey, String paraContent) {
            key = paraKey;
            content = paraContent;
            Next = null;
        }// Of the first constructor


        /**
         *********************
         * Overrides the method claimed in Object, the superclass of any class.
         *********************
         */
        public String toString() {
            return "(" + key + ", " + content + ") ";
        }// Of toString
    }// Of class DataNode

    /**
     * The data array.
     */
    DataNode[] data;

    /**
     * The length of the data array.
     */
    int length;

    /**
     *********************
     * Overrides the method claimed in Object, the superclass of any class.
     *********************
     */
    public String toString() {
        String resultString = "I am a data array with " + length + " items.\r\n";
        for (int i = 0; i < length; i++) {
            resultString += data[i] + " ";
        } // Of for i

        return resultString;
    }// Of toString

    /**
     *********************
     * The first constructor.
     *
     * @param paraKeyArray     The array of the keys.
     * @param paraContentArray The array of contents.
     *********************
     */
    public HashArray(int[] paraKeyArray, String[] paraContentArray) {
        length = paraKeyArray.length;
        data = new HashArray.DataNode[length];

        for (int i = 0; i < length; i++) {
            data[i] = new HashArray.DataNode(paraKeyArray[i], paraContentArray[i]);
        } // Of for i
    }// Of the first constructor



    /**
     *********************
     * The second constructor. For Hash code only. It is assumed that
     * paraKeyArray.length <= paraLength.
     *
     * @param paraKeyArray     The array of the keys.
     * @param paraContentArray The array of contents.
     * @param p       The key for the Hash function.
     *********************
     */
    public HashArray(int[] paraKeyArray, String[] paraContentArray, int p) {
        // Step 1. Initialize.
        length = p;
        data = new DataNode[length];

        for (int i = 0; i < length; i++) {
            data[i] = new DataNode(-1,"-1");
        } // Of for i

        // Step 2. Fill the data.
        int Position;
        DataNode tempposition;

        for (int i = 0; i < paraKeyArray.length; i++) {
            Position = paraKeyArray[i] % p;

            tempposition = data[Position];
            while(tempposition.Next!=null){
                tempposition=tempposition.Next;
            }
            tempposition.Next = new DataNode(paraKeyArray[i],paraContentArray[i]);

        }

    }// Of the second constructor

    public static int zhishu(int HashLength) {

        int j;
        for (int i = HashLength; i >= 2; i--) {
            for (j = 2; j <= i; j++) {
                if (i % j == 0) {
                    break;
                }
            }
            if (j == i) {
                return i;

            }
        }
        return 2;
    }


    public String HashSearch(int paraKey,int p){
        int position =paraKey%p;
        DataNode tempposition = data[position];
        String result = " ";

        while (tempposition.Next != null) {
            if (tempposition.Next.key == paraKey) {
                result = result + "key is_" + tempposition.Next.key + "  string is_" + tempposition.Next.content
                        + "  the position is_" + position + "\r\n";
                return result;
            }
            tempposition=tempposition.Next;
        }

        result = "there is no one";
        return result;
    }
    public static void Hashtest(){
        int[] tempUnsortedKeys = { 16, 33, 38, 69, 57, 95, 86 };
        String[] tempContents = { "if", "then", "else", "switch", "case", "for", "while" };
        int p = zhishu(tempUnsortedKeys.length-1);

        HashArray temptest = new HashArray(tempUnsortedKeys , tempContents , p);
        String temp;

        temp=temptest.HashSearch(16,p);
        System.out.println(temp);

        temp=temptest.HashSearch(57,p);
        System.out.println(temp);

        temp=temptest.HashSearch(95,p);
        System.out.println(temp);

        temp=temptest.HashSearch(295,p);
        System.out.println(temp);


    }
}// Of class DataArray

        运行结果:

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis持久层框架 | Lombok搭建

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Lombok Lombok项目是一个java库&#xff0c;它可以自动插入到编辑器和构建工具中&#xff0c;增强java的性能。不需要再写getter、setter或equals方法&#xff0c;只要…

易语言使用node编译的js文件

环境配置 npm install -g cnpm babel-preset-env babel-cli babel-polyfill browserifynpm install -g crypto-js nodejs转js 例如加密模块 browserify -r babel-polyfill -r crypto-js -o es6.txt browserify file.js -o es6.txt易语言 使用v8 推荐 直接生成导入js即…

LMV331TP-TR 滞后比较器实现精确电压比较与判决

文章目录 LMV331TP-TR1. 滞后比较器的基本概念和作用2. LMV331TP-TR 的特性和规格2.1 工作电压范围2.2 输入电压偏置2.3 响应时间 3. LMV331TP-TR 的工作原理3.1 内部结构3.2 滞后器功能的实现原理 4. 实现准确比较和判决的案例 LMV331TP-TR LMV331TP-TR 是一款优秀的滞后比较…

机器学习之逻辑回归模型

1 逻辑回归模型介绍 逻辑回归(Logistic Regression, LR)又称为逻辑回归分析&#xff0c;是一种机器学习算法&#xff0c;属于分类和预测算法中的一种&#xff0c;主要用于解决二分类问题。逻辑回归通过历史数据的表现对未来结果发生的概率进行预测。例如&#xff0c;我们可以将…

web存储(Storage)

目录 1、基本概念 2、功能监测 2.1 测试可用性 2、W3C标准 3、基本方法或属性 4、 Local Storage 4.1 描述 4.2 示例 5、sessionStorage 5.1 描述 5.2 示例 6、StorageEvent&#xff08;存储事件&#xff09; 6.1 构造函数 6.2 实例属性 6.3 实例方法 6.4 响应…

chatgpt赋能python:Python自动缩进详解

Python 自动缩进详解 作为一门面向对象的高级编程语言&#xff0c;Python 其中一个非常重要的特性便是自动缩进。Python 中的代码块是通过缩进来表示的&#xff0c;而不是通过括号或其他方式。这对于刚开始学习 Python 的初学者来说可能是很困难的&#xff0c;但一旦掌握了这一…

开好会议的方法 会议达成共识 明确目标,促成共识 单向会议 互动会议 会议讨论,文档先行 会前文档 会中 3D法则讨论 同步会议,跟进代办 举个栗子 企业管理

目录 开好会的方法 明确目标&#xff0c;促成共识 单向会议 互动会议 会议讨论&#xff0c;文档先行 会前文档 会中 3D法则讨论 同步会议&#xff0c;跟进代办 举个栗子 开好会的方法 会议有时候时间很长&#xff0c;很多无意义内容&#xff0c;如何开出有意义有价值…

Linux学习之权限表现

groupadd grouptest1添加一个叫grouptest1的用户组。 useradd gooduser -g grouptest1添加一个叫gooduser 的用户&#xff0c;并把它添加到grouptest1用户组里边&#xff0c;id gooduser看一下用户的信息。 接下来进行测试用户和用户组权限。 普通文件 在root账户下&#xf…

AI Chat 设计模式:2. 工厂设计模式

本文是该系列的第二篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的旁白。 问题列表 Q.1 介绍下工厂设计模式A.1Q.2 这种设计模式有哪几种形式A.2Q.3 使用c写一个简单工厂的例子A.3Q.4 我…

操作受限的线性表——队列

本文主要内容&#xff1a;介绍了队列的基本概念和基本操作&#xff0c;详细介绍了队列的顺序存储和链式存储。并介绍了循环队列和双端队列&#xff08;以及输入/输出受限的双端队列&#xff09;&#xff0c;及其基本操作。 目录 队列一、队列的基本概念1、基本概念2、基本操作…

计算机视觉-目标检测(二):从R-FCN到YOLO-v3

文章目录 1. R-FCN1.1 动机1.2. R-FCN 网络结构1.3. R-FCN 的损失函数1.4. R-FCN的训练及性能 2. YoLO-v12.1 简介2.2 YOLO-v1网络结构2.3 目标函数2.4 YOLO-v1的优缺点 3. YOLO-v23.1 YOLO-v2相比v1的优化 4. YOLO-v3参考 1. R-FCN 论文链接&#xff1a;R-FCN:Object Detecti…

java格式化数字 NumberFormat及DecimalFormat

一、JavaAPI官方描述 1、NumberFormat NumberFormat帮助您格式化和解析任何区域设置的数字。您的代码可以完全独立于小数点&#xff0c;千位分隔符的区域设置约定&#xff0c;甚至是使用的特定十进制数字&#xff0c;或者数字格式是否为十进制。 2、 DecimalFormat Decimal…

Linux之YUM管理工具

目录 Linux之YUM管理工具 定义 实现YUM的三个机制 RHEL8中yum源变化说明 案例 示例1 --- 建立本地光盘源&#xff08;本地yum源&#xff09; 示例2 --- 配置互联网源 yum(dnf)工具管理软件包 安装软件包 module子命令 案例 yum-config-manager的使用 定义 yum-conf…

Linux系统如何配置网络

Linux系统的三种网络模式&#xff1a; 桥接&#xff1a;可以和外部设备通信&#xff0c;主机和Ubuntu分别使用不同的IP地址NAT&#xff1a;可以和外部设备通信&#xff0c;主机和Ubuntu公用一个IP地址主机&#xff1a;只能和主机通信 在此我们介绍如何配置桥接网络&#xff1…

谓词的介绍与基本使用

&#x1f6a8;谓词 &#x1f6a6;概念 1.返回类型为bool的仿函数 2.接受一个参数—一元谓词 接受一个参数—二元谓词 &#x1f680;1.一元谓词 ⛽使用方法 因为返回值为bool类型&#xff0c;所以经常会将他使用成判断关系的函数 我们使用find_if&#xff08;&#xff09;对…

HBase 2.3.7中snappy压缩配置

本文将介绍如何在HBase 2.3.7中配置snappy压缩。snappy是一种快速的数据压缩和解压缩算法&#xff0c;可以提高HBase的存储空间利用率和读写性能。本文将使用HBase 2.3.7版本&#xff0c;运行在三个Ubuntu系统的虚拟机中&#xff0c;分别作为master和slave节点。 主要步骤如下…

【SpringBoot】SpringBoot Starter 作用及原理

文章目录 前言一、什么是 Starter二、Starter 的作用三、spring 整合组件四、spring-boot 整合组件五、Starter 原理 前言 有没有在入行后直接基于 SpringBoot 开发项目&#xff0c;没有 spring、servlet 开发经历的? 有没有用 SpringBoot 开发项目&#xff0c;但是第一次听…

服务注册中心Eureka

服务注册中心Eureka Eureka介绍Eureka 环境搭建Eureka 集群配置Eureka 的自我保护模式Eureka 架构图 Eureka介绍 在微服务架构中&#xff0c;有着许许多多的微服务&#xff0c;微服务之间需要彼此进行远程调用&#xff0c;需要知道彼此的地址&#xff0c;通过人工的方式去管理…

C++算法:加权连通图的最小生成树(Prim)

文章目录 前言一、Prim算法原理二、算法实现1、生成图2、Prim 总结原创文章&#xff0c;未经许可&#xff0c;严禁转载 前言 在前文加权连通图的最小生成树(Kruskal)中已经用以边找点的方式实现最小生成树的生成。Prim算法也是一种常用的最小生成树算法&#xff0c;和Kruskal不…

python 妙笔生花

1.学习编程好处 最主要的好处就是,思考问题的方式变得更加具有逻辑性。 日常我们敲代码时,需要思考每一行的代码执行效果,它就需要认真设计每行代码可用性。如果在设计上发生错误,在代码执行时就会报错。还能做到 触类旁通。 古语有云: 有道无术,术可求,有术无道,止于术…