数据结构简述,时间、空间复杂度,学习网站推荐
目录
IT 学习路线
相关坚韧大厚书
相关有趣/耐看书或视频
数据结构与算法学习网站推荐
刷题
时间、空间复杂度
数据结构简述
基本概念
数据结构与算法简述和CS综述整理。本文非基础的教程,本文会列出大量学习和参考网站。老惯例,一个文章是一个集大成(本文借助了语音输入(PC 版 讯飞输入法)由此加速码字,但仍保持简洁的文风)。
数据结构 + 算法 = 程序。数据结构:现实问题的符合计算机存储的建模;算法:解决现实问题的步骤(符合有穷性,确定性,可行性等)。
IT 学习路线
-
C语言基础(看书、B站等均可) →
-
C语言三剑客:《C和指针》、《C陷阱与缺陷》和《C专家编程》,经典永流传 →
-
数据结构与算法(线性表/树/图/哈希 + 排序/搜索/规划等等等 按需学) →
-
计算机专业学科看。《计算机组成原理》/《计算机体系结构》;《计算机操作系统》/《现代操作系统》/《深入理解计算机系统》;可选《编译原理》、《深入分析GCC》;网络协议如《计算机网络》、《TCP-IP详解卷一/卷二/卷三》等 →
-
可选 《CPU自制入门》 →
-
走向:嵌入式 Linux 方向、FPGA / 芯片设计 / 验证方向、具体某算法方向(如 CV、ML、DL)等等。
更多可详细参考 rd2coding/Road2Coding: 编程之路 (github.com) 的总结,比较全面了。
相关坚韧大厚书
没给出链接的 网搜名字即可。
-
哪本《数据结构与算法》最好? - 知乎 (zhihu.com) 该回答列举了一些不错的数据结构与算法方面的书籍。
-
《算法导论》(经典)是计算机学科的算法入门书。
-
《计算机体系结构》(经典),《计算机操作系统》/《现代操作系统》/《深入理解计算机系统》。
-
《编码的奥秘》,相关介绍/推荐 想练习《编码的奥秘》里面的知识,有什么软件有帮助? - 知乎 (zhihu.com)。《编译原理》(经典),《深入分析GCC》。
-
网络协议如《计算机网络》、《TCP-IP详解卷一/卷二/卷三》, 想深入了解 HTTP 协议,有哪些值得推荐的书籍? - 知乎 (zhihu.com)。
-
嵌入式应用相关:《GNU Make》,《Debugging with GDB》,《Linux 高级程序开发》,《POSIX 多线程程序设计》,《嵌入式Linux基础教程》,《嵌入式Linxu应用开发完全手册》,《嵌入式Linxu应用程序开发详解》。
-
嵌入式底层相关:内核相关:《深入理解Linux内核》,《Linux内核源代码情景分析》,《Linux内核设计与实现》;驱动相关:《Linux设备驱动程序》,《Linux设备驱动开发详解》,《Linux驱动开发入门与实践》。
相关有趣/耐看书或视频
-
学习心得介绍 | 小林coding (xiaolincoding.com)。介绍 | 小林coding (xiaolincoding.com)。
-
13 万字 C 语言从入门到精通保姆级教程2021 年版_极客江南的博客-CSDN博客。
-
tangtangcoding/C-CppLearning: C语言与C++学习 (github.com),内容超多。
-
图解系统 小林,笔记:图解系统(小林coding)_NiXGo的博客-CSDN博客,推荐。
-
图解网络 小林,推荐。
-
趣谈网络协议。
-
手绘图解 HTTP。30张图解HTTP常见面试题。
-
TCP/IP 教程 | 菜鸟教程 (runoob.com)。HTTP 教程 | 菜鸟教程 (runoob.com)。
-
《嵌入式C语言的自我修养》 从沙子讲到 CPU,从编辑器讲到编译器,从高阶 C 语言讲到内存管理,从 GNU 讲到多任务编程。
-
(完结)(小甲鱼)数据结构和算法_ 哔哩哔哩 _bilibili。
-
国嵌唐老师主讲【数据结构与算法C语言】(非常犀利)_ 哔哩哔哩 _bilibili 讲的慢。
-
《算法新解》开源书,我为什么加下划线?,《啊哈!算法》。
数据结构与算法学习网站推荐
-
代码随想录 (programmercarl.com),推荐,一站式,比较全。
-
数据结构部分简介 - OI Wiki (oi-wiki.org)。
-
SummerLife/DataStructure: 记录学习浙江大学《数据结构》课程的学习笔记和练习题, 以及在工作中常见数据结构的整理 (github.com).
-
算法入门教程(多语言实现) (biancheng.net)。
-
算法基础简介 - OI Wiki (oi-wiki.org)。动态规划部分简介 - OI Wiki (oi-wiki.org)。
-
字符串部分简介 - OI Wiki (oi-wiki.org)。
-
图论部分简介 - OI Wiki (oi-wiki.org)。
-
编程干货:15 个最有用的数据结构和 15 个最重要的算法_机器人技术与设计-面包板社区 (eet-china.com)。30 个重要数据结构和算法完整介绍(建议收藏保存)-云社区-华为云 (huaweicloud.com)。
刷题
-
花了几千大洋买的200集算法面试突击课程,现在面试成功全部免费分享给大家哔哩哔哩bilibili。
-
LeetCode 最热门 100 题哔哩哔哩bilibili。
-
本文文末附录:附:算法刷题总结。
时间、空间复杂度
时间复杂度表示一个算法内执行语句的数量在最坏的情况下随着循环次数 n 的增加而增长的数量级。一个算法内语句的使用次数(频度)表示为 f(n),n 为算法内循环语句的循环数,n 的变化直接改变 整个算法的语句使用次数;时间复杂度 O(g(n)) 的定义为,对于一个算法,当且仅当存在正整数 c 和 n0,使得 f(n) ≤ cg(n) 对于所有 n ≥ n0 成立,则该算法的渐进时间复杂度为 f(n) = O(g(n)),g(n) 为 n 的函数。
各个时间复杂度的语句频度的增长速度比较:O(log_2(n)) < O(n) < O(n*log_2(n)) < O(n^2) < O(n^3) < O(2^n) < O(n!),前三个很好,最后两个不可接受,剩余的强差人意。
程序的执行时间不仅依赖于问题规模,还可能随着数据的状态不同而变化,即其时间复杂度会变化,一般评价算法时候取最坏的情况的时间复杂度。
空间复杂度大同小异。
数据结构简述
一个软件项目,数据结构设计的好,后面进行功能实现时候的调用、修改和查询会特别方便,可以达到事半功倍的效果。
基本概念
数据结构几大类
-
线性表:
-
顺序(数组),
-
链式(链表(单链表、双向链表、循环链表(单向、双向),静态链表(借助数组实现))),
-
特殊(栈(FILO)、队列/堆(FIFO))。
-
-
树:二叉树、红黑树等。
-
图:无向图、有向图等。
-
索引/散列:Maps、Hash Table。
按照关系划分
-
按照逻辑关系(元素的连接关系):
集合,线性(数组、栈、队列/堆、链表等),树状(一对多),图状(多对多)。
-
按照存储关系:
-
顺序存储:如数组,要提前申请空间(静态分配(编译时进行)或动态分配(malloc & free))。优点:物理位置连续而紧凑,可 随机 / 直接 存取;缺点:会产生内存碎片,增、删改动时前后要跟着变(需要移动大量元素)。
-
链式存储:如链表、树、图,要提前申请空间(动态分配(malloc & free))。优点:链式、离散、节点化,空间可动态分配,改动方便(改节点的指向);缺点:空间占用大,查找不便(需要遍历整个链表)。
-
索引存储:“索引-数据”(Key-Value,也叫 Maps) 的结构形式。Java、C++ 中为“map,Python 中为 dictionary。
-
散列存储:如哈希表(Hash Table)等。
-
数据运算
-
每个基本数据结构要实现的基本操作:增(插入)、删(删除)、改(更新)、查(检索),判(判空,判满)、排(排序)、复(复位)。
-
更复杂的操作可用以上基本操作实现。
操作的时间复杂度
具体概念在 “C & MCU编写规范和其他” 一文的 “时间、空间复杂度” 一节有提到。(数据结构)十分钟搞定时间复杂度(算法的时间复杂度) - 简书 (jianshu.com)。一套图 搞懂“时间复杂度”_ 12 26 25 的博客-CSDN博客 _时间复杂度。
-
查找:顺序存储结构 O(1),单链表 O(n)。
-
插入和删除:顺序存储结构 O(n),单链表 O(1)。
相关文章:
数据结构简述,时间、空间复杂度,学习网站推荐
目录 IT 学习路线 相关坚韧大厚书 相关有趣/耐看书或视频 数据结构与算法学习网站推荐 刷题 时间、空间复杂度 数据结构简述 基本概念 数据结构与算法简述和CS综述整理。本文非基础的教程,本文会列出大量学习和参考网站。老惯例,一个文章是一个集…...
在线安装qt5.15之后任意版本
下载qt现在安装包: window安装包链接 进入cmd,用命令行打开安装包,并指定组件下载地址(这个是关键,之前用的是腾讯镜像,出现了版本灰色无法选中问题) .\qt-unified-windows-x64-4.6.1-online…...
【kafka实战】01 3分钟在Linux上安装kafka
本节采用docker安装Kafka。采用的是bitnami的镜像。Bitnami是一个提供各种流行应用的Docker镜像和软件包的公司。采用docker的方式3分钟就可以把我们想安装的程序运行起来,不得不说真的很方便啊,好了,开搞。使用前提:Linux虚拟机&…...
yum安装mysql8
记录一下安装过程用于后面项目参考 目录 说明安装步骤yum安装默认目录修改默认的数据目录必要的my.cnf属性修改卸载Mysql 说明 一般情况下都是docker安装,部分特殊情况下,例如老外的项目部分禁用docker,那一般二进制安装或者yum直接安装。 …...
十五)Stable Diffusion使用教程:另一个线稿出3D例子
案例:黄金首饰出图 1)线稿,可以进行色阶加深,不易丢失细节; 2)文生图,精确材质、光泽、工艺(抛光、拉丝等)、形状(包括深度等,比如镂空)和渲染方式(3D、素描、线稿等)提示词,负面提示词; 3)seed调-1,让ai随机出图; 4)开启controlnet,上传线稿图,选择cann…...
2023icpc网络预选赛I. Pa?sWorD(dp)
题目给定字符串长度n以及字符串s 其中出现小写字母可以代表小写字母和大写字母 比如a可以代表a和A 出现?可以代表26个小写字母和26个大写字母和10个数字 出现大写字母和数字就是原本的数 同时要求大写字母,小写字母,数字一定都存在替换完的字符串中…...
maven本地安装jar包
在实际开发中,有些jar包不能通过公共库下载,只能本地安装。可以按照以下步骤操作: 1、安装命令 mvn install:install-file -DgroupIdcom.chinacreator.sm -DartifactIdfbm-sm-common -Dversion0.0.1 -Dpackagingjar -Dfile../newJar/fbm-sm…...
QT中的inherits
目录 简介: 实例: 简介: 在Qt中,可以使用inherits函数来判断一个对象是否属于某个类或其派生类。inherits函数是QObject类的成员函数,因此只能用于继承自QObject的类的对象。 以下是inherits函数的一般用法…...
全国职业技能大赛云计算--高职组赛题卷①(容器云)
全国职业技能大赛云计算--高职组赛题卷①(容器云) 第二场次题目:容器云平台部署与运维任务1 Docker CE及私有仓库安装任务(5分)任务2 基于容器的web应用系统部署任务(15分)任务3 基于容器的持续…...
基于springboot+vue的入校申报审批系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
安卓逆向 - EdXposed LSPosed VirtualXposed
一、引言 接上篇:安卓逆向 - Xposed入门教程_小馒头yy的博客-CSDN博客 我们介绍了Xposed入门安装使用,但是只支持到Android 8,并且安装模块需要重启。今天我们来看看Xposed的其他版本。 二、各种Xposed框架对比 1、Xposed 只支持到安卓8&…...
Linux三大搜索指令的区别
find:可以在指定的路径下进行文件的搜索 —— 真的在磁盘文件中查找 例如find /usr/bin/ -name ls which 可以在指令路径下,/usr/bin,搜索指令文件 例如:which ls whereis:在系统特定的路径下查找,既可以找到可执行程序ÿ…...
C++ -- 特殊类设计
目录 设计一个类,不能被拷贝 C98的做法 C11的做法 设计一个类,只能在堆上创建对象 实现方式1 实现方式2 设计一个类,只能在栈上创建对象 实现方式1 方式1的优化 实现方式2 设计一个类,不能被继承 设计模式 什么是设计…...
指针和数组笔试题的透析
指针---进阶篇(三) 一、前言二、一维数组例题透析:三、指针笔试题1.例一:2.例二:3.例三:4.例四:5.例五:6.例六: 一、前言 那么好了好了,宝子们,从…...
「UG/NX」Block UI 超级点SuperPoint
✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#...
Linux——kafka常用命令
一、Kafka的常用命令包括: 1. 启动Zookeeper服务 前台启动: ./bin/zookeeper-server-start.sh config/zookeeper.properties 后台启动: ./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties 2. 停止Zookeeper服务 .…...
GLTF编辑器如何快速重置模型原点
1、什么是模型原点? 模型原点是三维建模中的概念,它是指在一个虚拟三维空间中确定的参考点。模型原点通常位于模型的几何中心或基本组件的中心位置。如图所示: 可以看到模型的原点在模型的几何中心 2、模型原点的作用 知道了什么是模型原点&…...
【STL】vector常见用法及模拟实现(附源码)
目录 前言1. vector介绍及使用1.1vector的介绍1.2 vector的使用1.2.1 构造函数 1.2.2 vector对象遍历1.2.3 reserve和resize1.2.4 insert和erase 2. vector模拟实现2.1 vector迭代器失效问题2.2 模拟实现reserve函数浅拷贝问题2.3模拟实现源码2.3.1 vector.h2.3.2 test.cpp 前言…...
深度学习保姆级教学
文章目录 前言1.深度学习概论2.神经网络1.基础原理2.损失函数3.SoftMax4.前向传播5.反向传播1.反向传播介绍 6 卷积神经网络应用1.检测任务2.超分辨率重构3.医学检测4.无人驾驶5. 人脸识别 6.卷积网络和传统区别7.卷积神经网络1.卷积做了什么?2.节点网络1.Alexnet2.…...
计算机视觉的优势和挑战
计算机视觉(CV)是一项快速发展的技术,它具有许多优势和挑战。以下是一些可能的例子: 优势: 1. 自动化:CV技术可以自动化任务,例如图像分类、目标检测和跟踪,从而提高生产力和减少人…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
