当前位置: 首页 > news >正文

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

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可以解决以上的问题

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 进度调度切换
  • HTML+CSS学习笔记
  • Elasticsearch——介绍、安装与初步使用
  • 【UI自动化】前言
  • ELK-01-elasticsearch-8.15.1安装
  • 【LLM】Ollama:本地大模型使用
  • 力扣3290.最高乘法得分
  • sklearn特征选取之RFE
  • 【Linux篇】TCP/IP协议(笔记)
  • 软考中级系统集成项目管理证书好考吗
  • Java多线程(1)—线程基础
  • 【Unity3d Shader】毛玻璃效果
  • el-select组件:选择某个选项触发查询
  • 华--清--速--递
  • Python知识点:如何使用Python进行算法交易
  • canvas 高仿 Apple Watch 表盘
  • HomeBrew常规使用教程
  • jdbc就是这么简单
  • leetcode98. Validate Binary Search Tree
  • redis学习笔记(三):列表、集合、有序集合
  • REST架构的思考
  • Solarized Scheme
  • Spring框架之我见(三)——IOC、AOP
  • STAR法则
  • 对超线程几个不同角度的解释
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 后端_ThinkPHP5
  • 基于webpack 的 vue 多页架构
  • 近期前端发展计划
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 国内开源镜像站点
  • #565. 查找之大编号
  • $$$$GB2312-80区位编码表$$$$
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (3)STL算法之搜索
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (定时器/计数器)中断系统(详解与使用)
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (分布式缓存)Redis分片集群
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (一)80c52学习之旅-起始篇
  • (一)Linux+Windows下安装ffmpeg
  • (转)http协议
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .CSS-hover 的解释
  • .gitignore不生效的解决方案
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET的数据绑定
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @SuppressWarnings注解
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题