01、Java 数据结构:数据结构和算法的概述

news2024/12/24 20:44:38

数据结构和算法的概述

  • 1 参考教材
  • 2 数据结构
    • 2.1 数据的逻辑结构
    • 2.2 数据的存储结构
    • 2.3 数据的运算
  • 3 基本的数学概念的复习
    • 3.1 函数的定义
    • 3.2 极限
    • 3.3 对数
  • 4 算法
    • 4.1 算法的基本特性
    • 4.2 算法设计的要求
    • 4.3 时间复杂度和空间复杂度是衡量算法优劣的重要指标

1 参考教材

主要参考的教材:《Java数据结构和算法(第2版)》 [美] 拉弗,计晓云 等
在这里插入图片描述

2 数据结构

  • 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关
  • 数据结构包括数据的逻辑结构、数据的存储结构以及数据的运算

2.1 数据的逻辑结构

  • 反映数据元素之间的关系
  • 有集合、线性结构、树型结构、图型结构
    在这里插入图片描述

2.2 数据的存储结构

  • 逻辑结构在计算机内存中的实现,它包括数据元素的表示和元素之间关系的表示
  • 有顺序存储结构(数组)、链式存储结构(链表)、索引存储结构、散列存储结构等
    在这里插入图片描述

2.3 数据的运算

对数据施加的操作,这种一系列的操作就是算法

3 基本的数学概念的复习

3.1 函数的定义

给定一个数集 A,假设其中的元素为 x。现对A中的元素 x 施加对应法则 f,记作 f(x),得到另一数集 B。假设 B 中的元素为 y。则 y 与 x 之间的等量关系可以用 y=f(x) 表示。把这个关系式就叫函数关系式,简称函数。函数概念含有三个要素:定义域 A、值域 C 和对应法则 f。其中核心是对应法则 f,它是函数关系的本质特征

3.2 极限

初等数学研究的对象是不变的量,高等数据研究的对象是变动的量。比如极限。“极限”是数学中的分支——微积分的基础概念,广义的“极限”是指“无限靠近而永远不能到达”的意思。极限是一种“变化状态”的描述。此变量永远趋近的值A叫做“极限值”

3.3 对数

  • 在数学中,对数是对求幂的逆运算,正如除法是乘法的倒数,反之亦然
  • 如果 a 的 x 次方等于 N(a>0,且a不等于1)a^x=N,那么数 x 叫做以 a 为底 N 的对数(logarithm),记作 x=logaN。其中,a 叫做对数的底数,N 叫做真数

4 算法

  • 按照某种逻辑关系组织起来的一批数据,按一定的方式把它存放在计算机的内存里,在这个基础上为了实现某个功能(比如查找某个元素,删除某个元素,给所有元素排序等等)而进行的一些列操作,我们把这一些列的操作步骤描述出来就是算法
  • 算法也可以解释为:计算机求解一个问题所需的一系列步骤

4.1 算法的基本特性

  • 输入:一个算法有0个或者多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身给出了初始条件
  • 输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的
  • 有穷性:算法必须能在执行有限个步骤之后终止
  • 确切性:算法的每一步骤必须有确切的定义
  • 可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成

4.2 算法设计的要求

  • 正确性:设计的算法能满足具体问题的需求,并且任何合法的输入都会得出正确的输出
  • 可读性:是指算法被写好之后,该算法理解的难易程度,一个算法可读性的好坏十分重要。如果一个算法比较抽象且难以理解,那么这个算法就不利于交流和推广使用,对于修改、扩展、维护来说都十分不方便,因此,在追求高效的同时,也应是算法尽量简明易懂
  • 健壮性:当输入数据非法时,算法也会做出相应的判断,而不会因为输入的错误而造成瘫痪
  • 高效性:时间效率高(时间复杂度)和需要的存储空间少(空间复杂度)

4.3 时间复杂度和空间复杂度是衡量算法优劣的重要指标

  • 时间复杂度:是用程序执行的次数来衡量,不是程序执行的时间
  • 空间复杂度:用程序执行所需要的最大内存

算法问题实质上就是数学问题,计算时间复杂度和空间复杂度远远没这么简单

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

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

相关文章

wy的leetcode刷题记录_Day62——二叉树结束

wy的leetcode刷题记录_Day62 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间:2022-12-27 前言 目录wy的leetcode刷题记录_Day62声明前言1750. 删除字符串两端相同字符后的最短长度题目介绍思路代码收获108. 将有序数组转换为二叉搜索树题…

各类遥测终端机RTU/水文遥测终端机简介

平升电子测遥测终端机RTU/水文遥测终端机基于4G、5G、NB-IoT、光纤、北斗三号卫星等通信网络,实现数据采集、存储、处理分析、传输,远程/自动控制现场泵、闸、阀等设备运行。它广泛应用于智慧水利领域的灌区信息化、水库安全监测、山洪灾害预警、水资源税…

泛型学习(java)

1.泛型的理解和好处 1.1看一个需求 1)请编写程序,在ArrayList中,添加3个Dog对象 Dog对象含有name和age,并输出name和age(要求使用getXxx()) 先使用传统的方法来解决->引出泛型 import java.util.ArrayList;public class Generic01 {public stati…

前端性能优化(一):指标和工具

目录 一:性能指标和优化目标 1.1.网络加载性能 1.2.用户交互体验 二:RAIL测量模型 2.1.Response(响应): 处理事件应在在50ms内完成 2.2.Animation(动画): 每10ms产生一帧 2.3.Idle(空闲&…

SpringBoot — 初始创建项目小白教程

这里写目录标题前言SpringBoot简介重要策略Spring Boot 项目约定IntelliJ IDEA 直接创建Maven项目改造创建常见项目结构代码层资源文件结构主要文件说明SpringBootApplication 注解分析总结前言 使用 Servlet/JSP 开发 JavaWeb 时,一个接口对应一个Servlet&#xf…

mysql分区之RANGE类型

目录 首先查看MySQL是否支持分区 在实际操作分区前我们得了解下分区的几点限制: RANGE分区实操 SQL如何查询分区数据 首先查看MySQL是否支持分区 show plugins; 当查询结果显示partition的状态为active则表示当前MySQL版本支持分区。分区方案一般有四种&#…

CVPR 2017|SfMLearner:单目视频中深度和姿态估计的无监督算法

🏆作者提出了一个单目相机的视频序列进行深度估计与运动估计,作者的方法是完全无监督的,端到端的学习,作者使用了单视角深度网络和多姿态网络,提出了一个图像(predict)与真实的下一帧&#xff0…

09---Vue使用路由

由于之前数据、主页全部放在Home.vue中,不能够实现复用,于是,现在进行拆分,拆分出数据主体(user.vue),侧边栏(aside),顶部栏(Header)&…

SpringCloudAlibaba 学习笔记

❤ 作者主页:Java技术一点通的博客 ❀ 个人介绍:大家好,我是Java技术一点通!( ̄▽ ̄)~* 🍊 记得关注、点赞、收藏、评论⭐️⭐️⭐️ 📣 认真学习,共同进步!&am…

疫情卷土重来,如何利用SRM系统打造数字化的“免疫系统”

2022年末,国内疫情再次卷土重来,形势严峻。国内企业也再次面临业务发展的压力。但实际上,在疫情常态化后,我国许多大中型企业都建立了全面的数字化“免疫系统”,增强了抗风险和跨周期的能力,大大增强了抵御…

【B站】Presto + Alluxio:B站数据库系统性能提升实践

欢迎来到【微直播间】,2min纵览大咖观点 在日常线上生产环境中有大量的数据需要被访问,为了保证数据同步以及查询效率,需要耗费较大的资源,同时,很多被查询和访问的数据是重复的,这对数据库系统造成极大压…

C++类和对象概念及实现详解(下篇)

文章目录 一、类的六个默认成员函数详解 1、拷贝构造 1、1 拷贝构造的引入及概念 1、2 拷贝构造函数的特征 2、赋值运算符重载 2、1 运算符重载 2、2 赋值运算符重载 3、普通对象取地址 4、const对象取地址 二、类和对象重点知识点 1、初始化列表 2、static成员 3、友元函数 4、…

一文带你走进MySQL索引

文章目录索引1. 索引的介绍2. 索引的本质3. 索引的结构3.1 Hash3.2 B树3.3 常见面试题之为什么用B树4. 索引的分类4.1 功能逻辑层次4.2 存储形式层次5. 索引的失效5.1 最左前缀原则5.2 索引失效的场景6. 索引常见面试题7. 总结及参考文献索引 1. 索引的介绍 索引是通过某种算…

潘多拉-视频播放器,一个轻量的视频播放器

潘多拉-视频播放器 轻量视频播放器,该项目是从https://github.com/getActivity/AndroidProject-Kotlin 中抽离出的一个视频播放器,之前没有 单独设置项目,我在使用过程中觉得这个挺方便好用的,所以为了方便使用,单独剥离出来,可以单独在项目中使用,后续我也会基于这个项目进行…

【数据结构】Leetcode旋转数组

目录 一、题目说明 二、题目解析 一、题目说明 题目链接:leetcode旋转数组 给你一个数组,将数组中的元素向右轮转k个位置,其中k是非负数。 示例1: 输入:nums [1,2,3,4,5,6,7],k 3 输出:[5,6,7,1,2,3,4…

给大家分享5款轻便小巧的好软件

随着网络信息技术的发展,越来越多的人在办公时需要用到电脑了。如果你想提高办公效率,那么就少不了工具的帮忙,今天给大家分享5款办公必备的好软件。 1.开源分享工具——ShareX ShareX 是一款 Windows 上开源的截图、文件共享和生产力工具&…

IB 生申请德国大学的条件

Hallo! 你是IB生吗?是否有去德国读大学的意愿?来看看IB生申请德国大学的条件吧~ 01IB课程简介 IB课程包括六个学科组,其中一个必须从 IBO 指定的第 1 到第 5 个科目组中选修,另外还有一个可选科目,可以从六个科目组中选…

华为智能基座【计算机组成原理】

华为智能基座【计算机组成原理】前言推荐华为智能基座实验1 基于QEMU的鲲鹏开发环境搭建1.1 QEMU的安装配置1.1.1 QEMU下载安装1.1.2 环境变量配置1.2 openEuler操作系统安装1.2.1 环境准备1.2.2 openEuler虚拟机创建1. 打开虚拟机2. 修改串口并登录1.3 网络配置1.3.1 参数设置…

骨传导耳机到底好不好用,五款好用的骨传导蓝牙耳机分享

很多人刚接触骨传导耳机,都会有一个疑问,骨传导耳机到底好不好用,下面我就为大家解答疑惑,骨传导耳机开放式的佩戴方式,更加舒适,使用更加安全,在平常使用都是很好用的,还不知道选择…

JAVA生成二维码QRcode

JAVA生成二维码QRcode1 : 配置集成1.1、配置maven1.2、配置文件1.3、logo文件2 : 代码集成2.1、加载配置文件2.2、工具类2.3、测试类3 : 测试结果3.1、生成二维码3.2、扫描结果3.3、资源1 : 配置集成 1.1、配置maven pom文件中添加一下配置 <!-- QR code --> <depe…