day06 1.算法的相关概念2.排序算法3.查找算法

  • 一、算法的相关概念

    • 程序 = 数据结构 + 算法 算法是程序设计的灵魂,结构是程序设计的肉体 算法:计算机解决问题的方法或步骤

    • 1.1 算法的特性

      • 1> 确定性:算法中每一条语句都有确定的含义,不能模棱两可

      • 2> 有穷性:程序执行一段时间后会自动结束

      • 3> 输入:至少有零个或多个输入

      • 4> 输出:至少一个或多个输出

      • 5> 可行性:经济可行性、社会可行性、能够运行

    • 1.2 算法的设计要求

      • 1> 正确性:给定合理的输入数据,能够得到正确的结果

      • 2> 健壮性:对于给定的不合理的输入数据,能够给出相应的处理措施

      • 3> 可读性:程序核心代码写注释、程序代码有缩进、程序代码命名规范

      • 4> 高效率:要求时间复杂度要尽可能低

      • 5> 低存储:要求空间复杂度尽可能低

    • 1.3 时间复杂度

      • 1> 算法时间复杂度计算公式:T(n) = O(f(n)); T(n):时间复杂度 n:表示问题的规模 f(n) :是问题规模与执行次数之间的函数 O(f(n)):使用O阶记法,记录算法时间复杂

  • 二、排序算法

    • 2.1 排序算法的分类

      • 1> 交换类排序:冒泡排序、快速排序

      • 2> 选择类排序:简单选择排序、堆排序

      • 3> 插入类排序:直接插入排序、折半插入排序

      • 4> 归并排序:二路归并、多路归并

    • 2.2 冒泡排序

      • 1> 在排序过程中,越大(小)的数据,经由交换后,会慢慢的“浮”到顶端,如同气泡一样

    • 2.3 选择排序

      • 1> 概念:每次从待排序序列中,找到最大(小)值,将其与待排序序列的第一个进行交换 1、从待排序序列中选择最值

      • 2、如果最值不是待排序序列的第一个,则进行交换

      • 3、从剩余待排序序列中,继续重复前两次的操作,直到,待排序序列为空

    • 2.4 直接插入排序

      • 1> 每次从待排序序列中,选择第一个,将其插入到已排序序列中

      • 1、选取待排序序列中的第一个元素

      • 2、跟前面的元素依次比较,如果前面的比当前元素大(小),则将前面的元素后移一位

      • 3、直到出现前面的不比当前的大(小)或者已经到最前面了,将选取的元素,放入空位置上

      • 4、对于待排序序列中的所有元素,重复上述操作

    • 2.5 快速排序

      • 1> 概念:快速排序是在序列元素与选定基准元素比较分割为大小两部分的交换排序

      • 从待排序列中任取一个基准元素 与基准元素比较将待排序列分割为大小两部分 再对各部分重新选择基准元素并依此规则排序 直到每个部分只剩一个元素为止

  • 三、查找算法

    • 3.1 概念

      • 所谓查找,就是给定数据元素的某个值,在查找表中确定一个其关键字等于给定值的数据元素的操作,叫做查找

    • 3.2 查找的分类

      • 1> 顺序查找:将待查找数据,进行全部遍历一遍,直到找到要查找的元素

      • 2> 折半查找:每次都去除一半的查找范围的查找方式,叫做折半查找

      • 3> 哈希查找:利用哈希表和哈希函数完成的查找方式(效率最高)

    • 3.3 折半查找

      • 1.要求:在顺序表中进行查找 且 数据必须是有序的

      • 2.原理:在顺序存储的有序列表中,通过逐次减半查找范围

    • 3.4 哈希查找

      • 1、哈希表是借助哈希函数将序列存储于连续存储空间的查找表

      • 2、哈希函数是根据关键字确定存储位置的函数

      • 3、哈希冲突是不同关键字由哈希函数得到相同存储位置的现象

      • 4、构造哈希函数的方法: 直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法

      • 5、除留余数法:取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址的方法 序列长度n:待查找数据的个数 哈希表表长m:一般为大于n的值, n / (3/4) 要被除的值p: 小于或等于表长的最大素数

      • 6、解决哈希冲突的方法 开放定址法、线性探测法、二次探测法、伪随机探测法、再哈希法、链地址法、建立公共溢出区

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

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

相关文章

【Linux】从零开始认识多线程 --- 线程ID

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 1 前言 上一篇文章中讲解了线程控制的基本接口: 线程创建pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);: pthread_t *thread :输出…

使用API有效率地管理Dynadot域名,设置过期域名抢注请求

简介 Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮箱&…

深入理解SQL中的INNER JOIN操作

本文介绍了INNER JOIN的定义、使用场景、计算方法及与其他JOIN的比较。INNER JOIN是关系数据库中常用的操作,用于返回两个表中匹配的行,只有在连接条件满足时才返回数据。本文详细解释了INNER JOIN的语法及其在一对多、多对多关系中的应用,通…

【github】使用KeepassXC 解决github Enable two-factor authentication (2FA) 第二因子认证

下载 https://github.com/keepassxreboot/keepassxc/releases/download/2.7.9/KeePassXC-2.7.9-Win64.msi 代理地址 https://dgithub.xyz/keepassxreboot/keepassxc/releases/download/2.7.9/KeePassXC-2.7.9-Win64.msi 由于该软件不允许截图,以下操作参考官网 …

如何检查代理IP地址是否被占用

使用代理IP时,有时候会发现IP仍然不可用,可能是因为已经被其他用户或者网络占用了。为了检测代理IP是否被占用,我们可以采用一些方法进行验证测试,以保证代理IP的有效性和稳定性。 1.ARP缓存方法 ARP缓存法是一种简单有效的检测代…

【Python面试题收录】Python编程基础练习题①(数据类型+函数+文件操作)

本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题(str) 请编写一个Python程序,完成以下任务: 去除字符串开头和结尾的空格。使用逗号(","&#…

kotlin示例

以下代码是我写的练习程序,更好的代码可以从这里查看:代码 生日卡片 package com.example.happybirthdayimport android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity…

使用echo写入多行文字到文件时换行的处理

目标 想使用echo写入如下内容到文件program.c里 #include<stdio.h> int main(){printf("hello!\n"); } 需要处理 1、如何处理行换 2、代码中的换行如何处理 实际例子 创建文件夹 mkdir test cd test chmod 777 . 创建文件写入内容 查看 cat -n program.c…

Flink入门(更新中)

目录 一、Flink 1.1 基本概念 1.1.1 flink简介 1.2 flink编程模版 1.3 常用概念 1.2.1 datastream 1.2.2 算子、Task 1.2.3 多流操作 1.2.6 时间语义 二、Flink编程实战(Java) 2.1 wordcount 一、Flink 1.1 基本概念 1.1.1 flink简介 1.图片介绍 性能&#xff1a…

[练习]如何使用递归算法?

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1. 递归概述 2.汉诺塔问题 题目描述​编辑 题解 代码实现 3…

package.json中对peerDependencies的理解

peerDependencies只要是用来限制依赖的&#xff0c;最近在开发的时候有遇到这样的问题&#xff0c;所以研究了一下 "peerDependencies": {"vue/composition-api": "^1.0.5","vue/runtime-core": "^3.0.0","echarts&q…

【Android】Activity生命周期与五种启动模式

文章目录 生命周期返回栈Activity状态生命周期方法 启动模式standard模式singleTask模式singleTop模式singleInstance模式singleInstancePerTask模式配置方式 生命周期 返回栈 每个Activity的状态由它在Activity栈&#xff08;又叫“回退栈back stack”&#xff09;中的位置决…

【ACM出版】2024年教育人工智能国际学术会议(ISAIE 2024,9月6-8)

2024年教育人工智能国际学术会议&#xff08;ISAIE 2024&#xff09;将于2024年9月6-8日在中国西安举行。本届会议由西京学院主办。 会议主要围绕人工智能在教育领域的最新研究成果展开&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提…

windows安装redis设置密码、修改端口、提供外部访问

windows安装redis设置密码、修改端口、提供外部访问 一、前言1. 设置密码2. 修改端口3. 允许外部访问4. 注意事项 一、前言 设置Redis在Windows上设置密码、修改端口以及允许外部访问&#xff0c;需要进行以下步骤&#xff1a; 下载地址 https://github.com/tporadowski/redi…

快速入门Jupyter notebook

快速入门 Jupyter notebook 一、前言&#xff08;一&#xff09;优点&#xff08;二&#xff09;特点&#xff08;三&#xff09;调用运行&#xff08;四&#xff09;新建 二、认识界面快捷键&#xff08;一&#xff09;三种模式&#xff08;1&#xff09;蓝色模式&#xff1a;…

中国森林地上和地下生物量碳变化数据集(2002-2021年)

中国森林地上和地下生物量碳变化数据集&#xff08;2002-2021年&#xff09; 数据介绍 为了量化中国近期全国性恢复工作的生态后果&#xff0c;过去20年森林生物量碳储量变化的空间显性信息至关重要。然而&#xff0c;在全国范围内进行长期生物量追踪仍然具有挑战性&#xff0c…

203、移除链表元素

1、题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a; 输…

基于迁移学习的手势分类模型训练

1、基本原理介绍 这里介绍的单指模型迁移。一般我们训练模型时&#xff0c;往往会自定义一个模型类&#xff0c;这个类中定义了神经网络的结构&#xff0c;训练时将数据集输入&#xff0c;从0开始训练&#xff1b;而迁移学习中&#xff08;单指模型迁移策略&#xff09;&#x…

Layui修改表格分页为英文

Layui修改表格分页为英文 1.前言2.Laypage属性 1.前言 主要记录初次使用Layui没有好好看官方文档踩坑&#xff0c;修改了源码才发现可以自定义 使用的Layui版本2.9.14 2.Laypage属性 Laypage属性中带的有自定义文本的属性 示例代码 table.render({.......page: {skipText: …

状态机 XState 使用

状态机 一般指的是有限状态机&#xff08;Finite State Machine&#xff0c;FSM&#xff09;&#xff0c;又可以称为有限状态自动机&#xff08;Finite State Automation&#xff0c;FSA&#xff09;&#xff0c;简称状态机&#xff0c;它是一个数学模型&#xff0c;表示有限个…