数据结构的基本概念与算法

news2024/12/26 11:47:45

数据结构的基本概念与算法

什么是数据?

        数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合;总结来说 -> 数据就是计算机程序加工的原料;

数据元素、数据项:

        数据元素就是数据的基本单位,通常作为一个整体进行考虑和处理;一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位;如下图所示 ->

再简单的说就是,数据元素可以看成 - 类,数据项可以看成 - 成员属性;



数据结构:

        数据结构是相互之间存在一种或多种特定关系的数据元素的集合;三大要素 ->

要素1: - 逻辑结构:

        1.集合 -> 各个元素同属于一个集合,别无其他关系

        2.线性结构 -> 数据元素之间是一对一的关系,除了第一个元素,所有元素都有唯一前驱;除了最后一个元素,所有元素都有唯一后继;

        3.树形结构 -> 数据元素之间是一对多的关系

        4.图状结构(网状结构)-> 数据元素之间是多对多的关系

要素2 - 物理结构(存储结构):

        1.顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中

        2.链式存储:逻辑上相邻的元素在物理位置上可以不相邻(注意:这里的意思是可以相邻,也可以不相邻)

        3.索引存储:在存储元素信息的同时,还建立附加的索引表

        4.散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希(Hash)存储

算法 - 什么是算法 ->

        数据结构:如何把显示世界的问题信息化,将信息存进计算机;同时还要实现对数据结构的基本操作;

        算法:如何处理这些信息,已解决实际问题;

        程序 = 数据结构 + 算法;

算法的五个特性:

        1.有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成;

        2.确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出;

        3.可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现;

        4.输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合;

        5.输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定的关系的量;

算法 - 算法效率的度量:

算法效率的度量:

        1.时间复杂度 -> 时间开销与问题规模 n 之间的关系;

        2.空间复杂度 -> 空间开销(内存开销)与问题规模 n 之间的关系;

算法 - 时间复杂度:

public static void test(int n) {                // 第 1 行
    System.out.println("输出1 ->");             // 第 2 行 
    for(int i = 0;i < n;i++) {                 // 第 3 行
        System.out.println("输出2 ->");        // 第 4 行
        System.out.println("输出3 ->");        // 第 5 行
    }                                         // 第 6 行
    System.out.println("输出4 ->");           // 第 7 行
}                                             // 第 8 行


public static void main(String[] args) {    // 第 9 行
    test(3000);                             // 第 10 行
}                                           // 第 11 行

上述代码中 语句频度 ->

第二行 -------    1次
第三行 -------    3001次
第四行、第五行 ------- 3000次
第七行 ------- 1次

所以可以这么计算时间复杂度 -> T(3000) = 1+ 3001 + 2*3000 +1 ;

在 main 函数中调用 test() 方法传递的参数是 3000 所以这里将 3000 替换成 n 可以得到:
T(n) = 3n + 3;

在问题规模足够大时,常数项可以忽略,最高阶数的常数部分也可以忽略不计,所以最后得到
T(n) = o(n)

多项相加只保留最高次方的项切忽略该项的常数部分,多项相乘的时候需要都保留,来看下面几个例子:

                    T1(N) = 3n + 3    ------------>    简化后得到:T1(n) = O(n)

       T2(n) = n^2 + 3n +1000   ------------>    简化后得到:T2(n) = O(n^2)

T3(n) = n^3 + n^2 + 999999   ------------->   简化后得到:T3(n) = O(n^3)

算法 - 空间复杂度:

        无论问题规模怎么变,算法运行所需的内存空间都是固定的常量;

        算法空间复杂度为 S(N) = O(1)  【 注释:S 表示 space 】

        算法原地工作 —— 算法所需内存空间为常量

        只需要关注存储空间大小问与问题规模相关的变量

        在我们日常开发中递归函数是带来内存开销的常用函数之一 -> 
S(n) = O(n)    -------     空间复杂度 = 递归函数调用的深度,下面是复杂度大小排列顺序:

O(1)  <  O(log2n)  <  O(n)  <  O(nlog2n)  <  O(n^2)  <  O(n^3)  <  O(2^n)  <  O(n!)  <  O(n^n)

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

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

相关文章

Python+Vue3+onlyoffice开发私有化文档管理系统实战笔记 20240731

之前进度 表字段设计如下&#xff1a; const columns [{title: 名称,key: name,dataIndex: name,},{title: 类型,key: category,dataIndex: category,},{title: 作者,key: author,dataIndex: author,},{title: 路径,key: path,dataIndex: path,},{title: 最近访问时间,key: l…

【Spark计算引擎----上篇:(全网最详细)带你从零基础通往精通之路】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;本阶段和大家一起分享和探索大数据技术–spark计算引擎&#xff0c;本篇文章主要讲述了&#xff1a;spark的概念&#xff0c;spark的起源&#xff0c;Spark的计算框架&#xff0c;Spark组…

Python爬虫入门03:用Urllib假装我们是浏览器

文章目录 引言Urllib库简介Request模块详解Error模块与异常处理Parse模块与URL解析Robotparser模块 模拟浏览器请求使用Request方法添加请求头信息代码示例1. 设置请求URL和请求头2. 定义请求参数并转换为适当的格式3. 使用Request方法封装请求4. 发送请求并获取响应 常用使用方…

项目实战_表白墙(升级版)

你能学到什么 表白墙&#xff08;升级版&#xff09;Mybatis的一些简单应用 正文 前⾯的案例中, 我们写了表⽩墙, 但是⼀旦服务器重启, 数据就会丢失. 要想数据不丢失, 需要把数据存储在数据库中&#xff0c;接下来咱们借助MyBatis来实现数据库的操作。 数据准备 如果我们…

Linux-用户和用户组管理

用户管理 创建 useradd USERNAME&#xff08;名字&#xff09; [rootlocalhost ~]# useradd bao 创建指令 怎么判断创建成功与否&#xff08;是否报错&#xff09; 观察是否报错可行但用变量的方式判断会更加直观 [rootlocalhost ~]# echo $? 变量 什么是变量&…

Vant2框架tab切换list不加载问题(切换后onload不继续触发)

遇到的问题&#xff1a; van-list 加载&#xff0c;页面上有个切换的 van-tab&#xff0c;实现切换不同的类型&#xff0c;加载不同的list的功能。 Vant2 的 List 列表 就有个 bug&#xff0c;当切换 tab 的时候&#xff0c;它的 onload 没有自动触发。 然而在当前标签页&#…

AMD第二季度财报:数据中心产品销售激增,接近总收入一半

#### 财报亮点 7月30日&#xff0c;AMD公布了截至6月29日的第二季度财务业绩&#xff0c;利润超过了华尔街的预期。根据TechNews的报道&#xff0c;最值得注意的是&#xff0c;AMD现在近一半的销售额来自于数据中心产品&#xff0c;而非传统的PC芯片、游戏主机或是工业与汽车嵌…

IDEA打开项目显示在顶端

问题 IDEA打开项目显示在顶端&#xff0c;更改到左侧 解决方案 删除项目中.idea文件,重新打开

【pikachu靶场】跨站脚本攻击详细教程Cross-Site Scripting(xss)

文章目录 XSS&#xff08;跨站脚本&#xff09;概述 1.反射型xss&#xff08;get&#xff09; 2.反射型xss&#xff08;post&#xff09; 3.存储型XSS 4.DOM型xss 5.DOM型XSS-X 6.xss之盲打 7.xss之过滤 8.xss之htmlspecialchars 9.xss之href输出 10.xss之js输出 XSS…

并发编程相关面试题-Synchronized

重量级锁实现的原理 1、synchronized是JVM内置锁&#xff0c;基于Monitor机制实现&#xff0c;依赖底层操作系统的互斥锁Mutex&#xff08;互斥量&#xff09;&#xff0c;它是一个重量级锁、 2、synchronized同步方法是通过方法中的access_flags中设置ACC_SYNCHRONIZED标志来…

换根dp学习总结3

我也不想搞这么多&#xff0c;但是这东西真的太难了&#xff0c;因为我还是个蒟蒻。算了蒟蒻继续写这次的总结了 寻找全图最远路径问题——Computer ——题目来源于hdu2196 题意&#xff1a;题目就是说会输入多组数据&#xff0c;每组数据给你一个n&#xff0c;表示结点的总数…

怎么评价程序员40岁了竟然还在撸代码?

怎么评价外卖员40岁了竟然还在送外卖&#xff1f; 怎么评价滴滴司机40岁了竟然还在跑滴滴&#xff1f; 怎么评价老师40岁了竟然还在教书&#xff1f;难道程序员的本职工作不是敲代码吗&#xff1f;无论你是管理层还是螺丝钉&#xff0c;工业环境下怎么可能一行代码都不敲呢&…

RocketMQ Dashboard安装

RocketMQ Dashboard 是一个基于 Web 的管理工具&#xff0c;用于监控和管理 RocketMQ 集群。它提供了一个用户友好的界面&#xff0c;使管理员能够轻松地查看和操作 RocketMQ 系统中的各种组件和状态。 主要功能包括&#xff1a; 集群管理: 监控和管理 NameServer 和 Broker …

web框架:django基础(二)

文章目录 django基础&#xff08;二&#xff09;1.回顾2.今日概要3.路由系统3.1 传统的路由3.2 正则表达式路由3.3 路由分发小结 3.4 name3.5 namespaceapp_namenamespace的多层嵌套 3.4 最后的 / 如何解决&#xff1f;3.5 当前匹配对象小结 4.视图4.1 文件or文件夹4.2 相对和绝…

《QDebug 2024年7月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Qt5 QML 在某些环境下&#xff0c;有些字体中文渲染有问题 如 Qt5.15 在部分安卓机上复制的复只有半截宽&#xff0c;半径的径字也不对&#xff0c;等等 用 Qt6.7 测试则正常&#xff0c;或者换成其他如小米、阿里巴巴…

Golang的TLS版本配置参数-排坑经历

一、背景 公司有个黑盒监控拨测组件&#xff0c;类似可以通过各种协议如HTTP、TCP、ICMP等等针对目标主机、目标IP、目标站点进行定时拨测&#xff0c;通过返回的状态码等信息来推断&#xff0c;目标业务系统/主机、站点是否存在异常&#xff0c;健康情况如何。 最近在配置一个…

一文搞懂机器学习!2024.6月最新!(附代码实现)

前言 机器学习入门精品文章 随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文介绍机器学习的基础内容。 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从数据中学习并做出决策或预测&am…

Jangow-1.0.1靶机漏洞复现(未完成)

首先&#xff0c;这个靶机只能使用VirtualBox打开&#xff0c;靶机下载地址为 https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 虚拟机软件下载地址为 Download_Old_Builds – Oracle VM VirtualBox 开启靶机后访问ip进入如下页面&#xff0c;点击site进入到一个…

【C++】哈希容器

unordered系列关联式容器 在之前的博文中介绍过关联式容器中的map与set&#xff0c;同map与set一样&#xff0c;unordered_set与unordered_set也是关联式容器。 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;查询效率可以达到logN&#xff1b;在…

详解HTTP代理与SOCKS代理之间的差异

代理服务器在网络安全和隐私保护方面&#xff0c;发挥着十分重要的作用。其中&#xff0c;HTTP代理和SOCKS代理是两种常见的代理方式&#xff0c;它们在原理、功能和应用场景上有着明显的差异。本文将为大家深入分析这两种代理之间的区别&#xff0c;帮助大家更好地选择适合自己…