数据结构与算法介绍

news2024/9/22 5:40:55

什么是数据结构

定义:

数据结构就是研究数据的存储方式;数据存储的目的是方便后期对数据的再利用;选择合适的方式来存储数据,是数据结构的核心内容。


数据存储结构的选择:取决于两方面,即数据的逻辑结构和存储结构(又称物理结构)

1. 逻辑结构:数据元素之间的逻辑关系,是从具体的问题抽象出来的数据模型。

线性结构:结构中的元素只存在一对一的关系。

非线性结构:结构中的元素存在非一对一的关系,包括一对多、多对多、集合。

2. 存储结构(物理结构):数据的逻辑结构在计算机内存中的存储方式称为数据的物理结构,也称为存储结构。

数据结构的几种存储结构:

  • 线性表,细分为顺序表、链表、栈、队列;
  • 数结构,包括普通树、二叉树、线性二叉树等;
  • 图存储结构

逻辑结构、存储结构和运算三者之间的关系:


数据类型:

是高级程序设计语言中的一个基本概念,在计算机科学和计算机编程中,数据类型或简单的类型是数据的一个属性,它告诉编译器或解释器程序员打算如何使用数据。大多数编程语言支持整数(大小不同)、浮点数(近似实数)、字符布尔值的基本数据类型。

数据类型约束表达式的值,例如变量或函数,可能需要。此数据类型定义了可以对数据执行的操作、数据的含义以及存储该类型值的方式。

数据类型提供一组值,表达式(即变量、函数等)可以从中获取其值。


什么是算法

定义:

数学和逻辑的角度,算法本质上是一种逻辑关系的推理,面向现实问题的时候就要选择一套比较符合现象描述的逻辑关系。

计算机的角度,算法通常指由计算机执行的一系列指令,即所谓的程序,有明确的输入和输出,用于解决输入给计算机的问题,计算机中的算法表述方式有自然语言、伪代码、程序语言等。

算法的五个特性:

  1. 输入 —— 一个算法应以待解决的问题的信息作为输入
  2. 输出 —— 输入对应指令集处理后得到的信息
  3. 可行性 —— 算法是可行的,即算法中的每一条指令都是可以实现的,均能在有限的时间内完成
  4. 有穷性 —— 算法执行的指令个数是有限的,每个指令又是在有限时间内完成的,因此整个算法也是在有限时间内可以结束
  5. 确定性 —— 算法对于特定的合法输入,其对应的输出是唯一的;即当算法从一个特定输入开始,多次执行同一指令集结果总是相同的

算法性能分析:

一般用复杂度来分析算法性能,复杂度即通过事先估算法计算出的用来衡量算法效率的值。因此并不是说代码的长度越长复杂度就越高,或者代码中的数据越多复杂度就越高。

1. 时间复杂度——用来衡量算法消耗时间的多少

用函数来定性描述该算法的运行时间

假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。

【大 O表示法:】

  • 大 O 用来表示上界的,当用他作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界;
  • 决定使用哪些算法,不是时间复杂度越低越好(因为简化后的时间复杂度忽略了常数项等等),要考虑数据规模,如果数据规模很小甚至可以用O(n^2)的算法比O(n)的更合适(在有常数项的时候)。

[1.] 为什么在计算时间复杂度的时候要忽略常数项系数呢?

因为根据大O的定义,大 O 就是数据量级突破一个点且数据量级非常大的情况下所表现出的时间复杂度,这个数据量也就是常数项系数已经不起决定性作用的数据量;

但当常数项很大的时候,也需要考虑;

【算法时间复杂度排序:】

  • O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(nlogn)线性对数阶 < O(n^2)平方阶 < O(n^3)立方阶 < O(2^n)指数阶
  • 复杂表达式化简:去加法常数项--->去常数系数--->保留最高项--->去掉数量级小的项;
  • O(logn)中的 log 是以什么为底:一般忽略底数的描述;

[2.] 如何计算时间复杂度:主要看执行的次数和输入的关系

[3.]常见算法复杂度介绍:

  • 常数阶:O(1)
    • 是最低的时空复杂度,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变
    • 哈希算法就是典型的 O(1)的时间复杂度
    • 只要循环次数已知,为常数且与传参数无关,其时间复杂度即为 O(1)
    • 一般而言,不论代码有多少行,只有其中没有循环、递归,则其复杂度都是 O(1)
  • 对数阶:log(n)
    • 当数据增大 n 倍时,耗时增大 logn 倍数,比如当数据增大 256 倍时,耗时只增大 8 倍,是比线性还要低的时间复杂度;
    • 二分查找、幂运算、欧几里得算法都是的log(n)时间复杂度
int cnt = 1;
while (cnt < n)
{
    cnt *= 2;
}
//由于 cnt 每次乘以 2 之后都会更加逼近n,在有 x 次数之后,cnt 将会大于 n 从而跳出循环,所以有 2^x = n,
//也就是 x=log2n,所以这个循环的时间复杂度为 O(logn).
  • 线性阶:输入和输入成正比,O(n)
    • 计数排序、基数排序、桶排序的时间复杂度都是 O(n);
 
for(int i=0;i<n;i++){
	sum += i;
} 
//当n=1,执行一次,当n=100,执行100次 ,所以当为n时,执行n次,所以时间复杂度为O(n)
  • 线性对数阶:O(nlog(n))
int n =100;
int m = 1024;
for(int i=0; i<n; i++){
    while(i < m){
        i = i*2;
    }
}
// while循环是一个对数阶为log1024 记做logn,
//for循环是一个线性阶n, n=100, 则他们一起的时间复杂度为O(nlogn)
  • 平方阶:输入和输入成平方,O(n^2)
for(int i=0;i<n;i++){
   for(int j=0;j<n;j++){
       
    }
}
//两层 for 循环,每层都执行 n 次,所以时间复杂度是 O(n^2)
  • 立方阶:O(n^3)
    • 三层循环嵌套
  • 指数阶:O(2^n)
    • 斐波那契算法
long function(int n) {    
    if (n <= 1) {        
        return 1;
    } else {        
        return function(n - 1) + function(n - 2);
    }
}//斐波那契算法

2. 空间复杂度——用来衡量算法所需要开辟新空间的多少

  • 算法的存储量包括:程序本身所占空间、输入数据所占空间、辅助变量所占空间
  • 大多数情况下会选择牺牲空间换时间

算法和数据结构关系

关系:

算法 + 数据结构 = 程序

出自Pascal 之父尼古拉斯·维尔特(Niklaus Emil Wirth);这个公式对计算机科学的影响程度足以类似物理学中爱因斯坦的“E=MC^2”。

算法(Algorithm) 就是解决问题的方法或者过程。如果我们把问题看成是函数,那么算法就是将输入转换为输出的过程。数据结构(Data Structure) 是数据的计算机表示和相应的一组操作。程序(Program)则是算法和数据结构的具体实现。


参考

  • 数据结构——非线性结构(图)-CSDN博客

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

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

相关文章

metersphere 设置定时任务和查看报告

设置定时任务 设置时间 查看执行后的测试报告 查看报告详情

【报错栏】(Vue) Invalid handler for event “click“: got undefined

Property or method "add" is not defined on the instance but referenced during render. 翻译&#xff1a; 属性或方法“add”未在实例上定义&#xff0c;但在渲染期间引用。 Invalid handler for event "click": got undefined 翻译&#xff1a; …

使用VUE3实现简单颜色盘,吸管组件,useEyeDropper和<input type=“color“ />的使用

1.使用vueuse中的useEyeDropper来实现滴管的功能和使用input中的type"color"属性来实现颜色盘 效果&#xff1a; 图标触发吸管 input触发颜色盘 组件代码部分 &#xff1a;<dropper> ---- vueuse使用 <template><div class"sRGBHexWrap fbc…

DGL在异构图上的GraphConv模块

回顾同构图GraphConv模块 首先回顾一下同构图中实现GraphConv的主要思路&#xff08;以GraphSAGE为例&#xff09;&#xff1a; 在初始化模块首先是获取源节点和目标节点的输入维度&#xff0c;同时获取输出的特征维度。根据SAGE论文提出的三种聚合操作&#xff0c;需要获取所…

2023亚太杯数学建模B题完整原创论文讲解

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2023亚太地区数学建模竞赛B题玻璃温室的微气候调控完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 论文共6…

ZC-OFDM模糊函数原理及仿真

文章目录 前言一、ZC 序列二、ZC-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、ZC-OFDM 模糊函数②、ZC-OFDM 距离分辨率③、ZC-OFDM 速度分辨率前言 本文进行 ZC-OFDM 的原理讲解及仿真,首先看一下 ZC-OFDM 的模糊函数仿真…

roseha for windows 11+oracle 11g部署过程

文章目录 一、环境准备关闭防火墙配置hosts共享存储准备 二、部署步骤1.主机A、B安装数据库软件2.主机A进行数据库实例创建3.主机B创建数据库4.安装配置roseha软件 一、环境准备 windows server 2019 oracle 11.2.0.3 EE roseha for windows 11 5个IP地址&#xff1a;2心跳、3…

元宇宙vr线上展馆在线制作降低开发门槛和成本

让人人都拥有自己的元宇宙空间&#xff0c;说起来就是一个令人亢奋的消息&#xff0c;也是大家所期待的&#xff0c;VR元宇宙空间在线编辑平台是VRARAI元宇宙公司深圳华锐视点自主研发的平台&#xff0c;允许用户在虚拟环境中创建、设计和共享空间&#xff0c;操作简单&#xf…

Ubuntu20.04上编译安装TVM

本文主要讲述如何在ubuntu20.04平台上编译TVM代码并在python中import tvm成功。 源代码下载&#xff1a; git clone --recursive https://github.com/apache/tvm tvm 平台环境升级&#xff1a; 1&#xff09; sudo apt-get update 2&#xff09; sudo apt-get install -y pyth…

RK3588平台 USB框架与USB识别流程

一.USB的基本概念 在最初的标准里&#xff0c;USB接头有4条线&#xff1a;电源&#xff0c;D-,D,地线。我们暂且把这样的叫做标准的USB接头吧。后来OTG出现了&#xff0c;又增加了miniUSB接头。而miniUSB接头则有5条线&#xff0c;多了一条ID线,用来标识身份用的。 热插拔&am…

【信息隐藏】信息隐藏基础

00 学习资源 0.1 推荐书籍 1.多媒体安全基础导论 复旦大学出版社 蓝皮&#xff1b; 2.隐写学原理与技术&#xff08;赵险峰&#xff09;科学出版社 蓝皮 0.2 视频课程 南开大学-信息隐藏技术&#xff08;没看&#xff09; 0.3 代码资源 GitHub一位phd&#xff1a;https:/…

Spring Cloud 版本升级遇坑记:OpenFeignClient与Gateway的恩怨情仇

Spring Cloud 版本升级遇坑记&#xff1a;OpenFeignClient与Gateway的恩怨情仇 近日&#xff0c;在对项目中的 Spring Boot、Spring Cloud 以及 Spring Cloud Alibaba 进行版本升级时&#xff0c;遭遇了一个令人头疼的问题&#xff1a;Spring Cloud Gateway 在运行时一直卡住&a…

ES之x-pack-core-7.14.2许可证修改为白金版

X-Pack是什么 X-pack是elasticsearch的一个扩展包&#xff0c;将安全&#xff0c;警告&#xff0c;监视&#xff0c;图形和报告功能捆绑在一个易于安装的软件包中&#xff0c;虽然x-pack被设计为一个无缝的工作&#xff0c;但是你可以轻松的启用或者关闭一些功能。 主要分一下步…

W11安装mysql8详细保姆篇

一、MySQL的下载 目前官方最新版本是8.0.34&#xff0c;考虑到其稳定性、可靠性还需一定周期保证&#xff0c;所以使用官方版求稳定仍然建议5.7系列。MySQL官方下载链接&#xff1a;MySQL官网下载 二、MySQL的安装 1、右击下载完成的安装包 2、点击Custom >> Next 3、…

基于springboot实现冬奥会科普平台系统【项目源码+论文说明】

基于SpringBoot实现冬奥会科普平台系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理平台应运而生&…

销售为什么会选择使用电销这种方式 ?

在网络经济时代的大环境下&#xff0c;网络营销作为一种新型营销模式和营销理念&#xff0c;已经抢占了大部分市场。 网络营销&#xff0c;是指利用互联网技术和现代信息技术&#xff0c;以及社交媒体平台&#xff0c;进行产品宣传、销售、服务、品牌传播等活动的一种营销模式。…

如何在GO中写出准确的基准测试

一般来说&#xff0c;我们不应该对性能进行猜测。在编写优化时&#xff0c;会有许多因素可能起作用&#xff0c;即使我们对结果有很强的看法&#xff0c;测试它们很少是一个坏主意。然而&#xff0c;编写基准测试并不简单。很容易编写不准确的基准测试&#xff0c;并且基于这些…

Vue框架学习笔记——事件处理

文章目录 前文提要事件处理的解析过程样例代码如下&#xff1a;效果展示图片&#xff1a;v-on:click"响应函数"v-on:click简写形式响应函数添加响应函数传参占位符"$event"注意事项 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包…

城市数字孪生优秀案例集 - 城市治理类 - 深圳市城市交通数字孪生建设

一、背景意义 “十四五”规划、《数字交通发展规划纲要》、《广东省数字经济促进条例》等提出“构建城市数据资源 体系&#xff0c;推进城市数据大脑建设&#xff0c;探索建设数字孪生城市”。 当前&#xff0c;我国 9 亿城市化人口每天出行约 16 亿人 次&#xff0c;主要大城…

图神经网络的介绍

1. 图神经网络概念 https://cloud.tencent.com/developer/article/2334518?areaId106001 https://blog.csdn.net/qq_44689178?typeblog; 先参考阅读这篇博主&#xff1b; 该文献中&#xff0c;介绍了 多视图 的 图神经网络的学习&#xff1b; 以及多视图 图神经网络的 对比…