算法导论——Data Structures and Dynamic Arrays 笔记

news2024/9/23 22:42:42

Interface(API/ADT) vs Data structure

InterfaceData structure
规范表示
可以存储哪些数据如何存储
操作的作用,支持哪些操作,在某种意义上的含义算法——如何支持这些操作
问题解决方案

同一个问题可以用不同的数据结构来解决

两个主要接口

两个主要接口:集合序列

不同级别的序列

静态序列接口

x 1 , x 2 , x 3 , , , x n x_1,x_2,x_3,,,x_n x1,x2,x3,,,xn 序列,问以下的解决方案

问题描述
Build(x)在此接口中构建数据结构
Len()返回长度
Inter_Seq()按照指定的顺序排列或者输出
Get_at(i)获取第i个位置的元素
Set_at(i,x)将第i个位置的元素替换为x
Get_First/Last()获取第一个或最后一个元素
Set_First/Last(x)将第一个或最后一个元素替换为x

自然的解决方案:静态数组

使用静态数组的原因

  • 数组在内存中是连续的
  • Array[i] 等价于 memery[address(arrray) + i]
  • 即可以用恒定的时间来访问其中的元素

使用静态数组的时间复杂度

函数时间复杂度
Get_at(i)、Set_at(i)、Len()O(1)
Build(x)、Inter_SeqO(n)

内存分配模型:可以在O(n)的时间内分配一个大小为n的数组 => 空间复杂度等同于时间复杂度

动态序列接口

对静态的序列添加如下的操作:

问题描述
Insert_at(i,x)在第i个位置添加值为x的元素
Delete_at(i)删除第i个位置的元素
Insert/Delete_First/Last(i,x)/(i)在第一个或者最后一个位置进行插入或者删除

解决方案:链表

什么是链表?

  • 将项目存储在一堆节点中
  • 每一个节点都有一个项目和下一个指针
  • 使用下一个指针来链接这些节点
  • 在RAM是无序的
静态数组链表
insert/delete_at() 花费O(n)时间insert/delete_first()花费O(1)时间,get/set_at()在最坏的情况下花费O(n)时间
原因:如果靠近开头,则之后的所有元素后移
必须分配一个新数组

动态数组:List可以解决以上的问题

两个主要数据结构工具/方法

两个主要数据结构工具:数组基于指针或链接的数据结构

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

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

相关文章

孤独伤感视频素材哪里找?分享热门伤感短视频素材资源网站

你是不是也经常在抖音上刷到很火的伤感视频,那么伤感视频素材都在哪里可以下载呢?作为一名从业多年的视频剪辑师,今天就跟大家聊聊那些可以下载伤感素材高清无水印的网站,如果你也在苦苦找寻伤感素材,快来看看吧&#…

JEDEC DDR4 SRAM standard

本文主要记录DDR4与DDR3有较大差异的点。 2.DDR4管脚 信号 类型 描述 C0,C1,C2 input chip IDchip ID仅用于通过TSV(硅通孔)选择3DS堆叠组件的2层、4层、8层高堆栈中的每一片,chip ID被视为命令代码的一部分。 ACT_n input 激活命令…

【小程序】uniapp自定义图标组件可动态更换svg颜色

组件描述 通过图标名称加载对应svg,size参数调整图标大小,color参数调整图标颜色 解决思路: 存svg获svg,对象方式正则替换svg的fill值,不改变源文件,通过base64直接加载缓存svg源文件,避免重…

在VMware16中安装Windows 10:完整教程

在VMware中安装Windows 10:完整教程 1.安装环境准备2.创建虚拟机 1.安装环境准备 1.虚拟机: VMware-workstation-full-16.2.2-19200509 2.系统镜像:win10 2.创建虚拟机 1.自定义 2.下一步 3.稍后安装系统 3.默认下一步 4.虚拟机取名和选择存放路径(按需更改…

【已解决】键盘输入数字-使用JAVA语言实现键盘输入的数字再通过快速排序算法输出

文章目录 一、前言任务描述相关知识分治策略:编程要求测试说明 二、具体代码实现总结 一、前言 —快速排序 任务描述 在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放入最终位置后,整个数据序…

css如何设置间距

在CSS中设置间距是非常常见的需求,可以通过多种属性来实现。以下是一些常用的CSS属性及其用法,用于设置元素之间的间距: 内边距(Padding) padding 属性用于设置元素内容与元素边框之间的距离。可以分别设置四个方向的…

RTR_Chapter_6 上

第六章 纹理 表面纹理(texture)是指其外观和给人的视觉感受,就像是一幅油画的图案一样。而在计算机图形学中,纹理化则指的是一个过程,即通过使用一些图像、函数或者其他数据,来对每个表面位置的外观表现进行…

高德地图矢量图形点击事件生成

官方文档https://lbs.amap.com/demo/javascript-api-v2/example/overlay-editor/polylineeditor 生成矢量图形如上,代码如下 const markerAddof ref(false) // 绘图 function drawMark () {if (!markerAddof.value) {//限制矢量图形点击只显示一个if (cameraId.va…

Discord邀请Midjourney机器人失败?教你一招解决

最近小鲨在使用Midjourney的过程中,遇到一个问题: Discord在邀请Midjourney机器人的时候,报错: Unable to accept invite(无法接受邀请) 因为Midjourney目前,主要还是在Discord里使用。 如果D…

【docker】在IDEA工具内,远程操作服务器上的docker

一,配置 在服务器上,对docker配置如下内容: vi /usr/lib/systemd/system/docker.service添加如下: -H tcp://0.0.0.0:2375重新加载,并重启docker: #重新加载配置 systemctl daemon-reload# 重启docker …

双路创新深度学习!TCN-Transformer+LSTM多变量时间序列预测(Matlab)

双路创新深度学习!TCN-TransformerLSTM多变量时间序列预测(Matlab) 目录 双路创新深度学习!TCN-TransformerLSTM多变量时间序列预测(Matlab)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab…

肾癌的多模态预测模型-临床-组织学-基因组

目录 摘要 技术路线 ① lncRNA的预测模型 ②病理 WSI 的分类器 ③临床病理分类器 模型结果 与别的模型比较 同行评审学习 1)使用lncRNA的原因 2)模型临床使用意义 3)关于截止值的使用 摘要 A multi-classifier system integrated…

51.字符串比较实例-用户登录

//已知正确的用户名和密码,请用程序实现模拟用户登录 //总共三次机会,登录之后给出相应的提示 import java.util.Scanner;public class 登录 {public static void main(String[] args) {//1.定义两个变量,记录正确的用户名和密码String righ…

红黑树:强大的数据结构之插入详解,附图

一、红黑树概述 红黑树是一种自平衡二叉查找树,具有以下性质:节点要么是红色要么是黑色;根节点是黑色;每个叶子节点(NIL 节点)是黑色;每个红色节点的两个子节点都是黑色;从任一节点到…

【已解决】ElementPlus 的 el-menu 组件如何用 js 控制展开某个子菜单,并在其他组件中控制使用呢?

文章目录 需求几次探索官网寻找线索(解决办法) 需求 我如何用代码来实现 ElementPlus 的菜单的展开和收缩呢? 几次探索 尝试通过找到节点之后,使用 click 事件,失败了 // 伪代码如下 const handleFindNodeAndClick …

【数据结构】散列(哈希)表简单介绍

散列表也叫做哈希表(Hash table),散列表通过关键码和存储地址建立唯一确定的映射关系,能够快速查找到对应的元素,排序算法中的计数排序就是一种利用哈希进行排序的算法。 一、散列表的概念 散列表(Hash ta…

【优选算法之前缀和】No.6--- 经典前缀和算法

文章目录 前言一、前缀和例题模板:1.1 【模板】前缀和1.2 【模板】⼆维前缀和1.3 寻找数组的中⼼下标1.4 除⾃⾝以外数组的乘积1.5 和为 K 的⼦数组1.6 和可被 K 整除的⼦数组1.7 连续数组1.8 矩阵区域和 前言 👧个人主页:小沈YO. &#x1f6…

提升晶振电路抗扰性:优化方案解析

在现代电子设备中,晶振作为提供稳定时钟信号的核心组件,其稳定性对整个系统的运行至关重要。然而,电路抗扰性不良往往会导致晶振失效,进而影响设备的整体性能。晶发电子针对这一问题,提出了以下关于晶振电路抗扰性及优…

【C++】拆分详解 - string类

文章目录 一、为什么学习string类?二、标准库中的string类  1. 定义  2. 常用接口说明     2.1 构造     2.2 容量操作     2.3 访问及遍历操作     2.4 修改操作     2.5 非成员函数 三、OJ练习自测  [1. 仅仅反转字母](https://leetcod…

9.23 My_string.cpp

my_string.h #ifndef MY_STRING_H #define MY_STRING_H#include <iostream> #include <cstring>using namespace std;class My_string { private:char *ptr; //指向字符数组的指针int size; //字符串的最大容量int len; //字符串当前…