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

数据结构简述,时间、空间复杂度,学习网站推荐

目录

IT 学习路线

相关坚韧大厚书

相关有趣/耐看书或视频

数据结构与算法学习网站推荐

刷题

时间、空间复杂度

数据结构简述

基本概念


数据结构与算法简述和CS综述整理。本文非基础的教程,本文会列出大量学习和参考网站。老惯例,一个文章是一个集大成(本文借助了语音输入(PC 版 讯飞输入法)由此加速码字,但仍保持简洁的文风)。

数据结构 + 算法 = 程序。数据结构:现实问题的符合计算机存储的建模;算法:解决现实问题的步骤(符合有穷性,确定性,可行性等)。


IT 学习路线

  1. C语言基础(看书、B站等均可) →

  2. C语言三剑客:《C和指针》、《C陷阱与缺陷》和《C专家编程》,经典永流传 →

  3. 数据结构与算法(线性表/树/图/哈希 + 排序/搜索/规划等等等 按需学) →

  4. 计算机专业学科看。《计算机组成原理》/《计算机体系结构》;《计算机操作系统》/《现代操作系统》/《深入理解计算机系统》;可选《编译原理》、《深入分析GCC》;网络协议如《计算机网络》、《TCP-IP详解卷一/卷二/卷三》等 →

  5. 可选 《CPU自制入门》 →

  6. 走向:嵌入式 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函数的一般用法&#xf…...

全国职业技能大赛云计算--高职组赛题卷①(容器云)

全国职业技能大赛云计算--高职组赛题卷①(容器云) 第二场次题目:容器云平台部署与运维任务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:在系统特定的路径下查找,既可以找到可执行程序&#xff…...

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技术可以自动化任务,例如图像分类、目标检测和跟踪,从而提高生产力和减少人…...

nli-distilroberta-base部署教程:Docker镜像免配置运行DistilRoBERTa NLI API

nli-distilroberta-base部署教程:Docker镜像免配置运行DistilRoBERTa NLI API 1. 项目介绍 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务。它能帮你快速判断两个句子之间的关系,特别适合需要分析文本逻辑关系的应用场…...

Wireshark过滤规则、OSI模型与TCP三次握手详解

本文内容有以下三个部分: wireshark过滤规则osi模型简述tcp三次握手 一、wireshark过滤规则 wireshark只是一个抓包工具,用其他抓包工具同样能够分析tcp三次握手协议。例如,Sniffmaster是一款全平台抓包工具,支持HTTPS、TCP和UDP协…...

OpenClaw监控告警方案:千问3.5-27B分析服务器日志

OpenClaw监控告警方案:千问3.5-27B分析服务器日志 1. 为什么需要个人级日志监控方案 去年我的个人博客服务器遭遇了一次持续3天的宕机,直到有读者发邮件反馈才发现问题。传统企业级监控方案如PrometheusGrafana对个人项目而言过于笨重,而简…...

qmd检索结果解释:--explain参数与RRF+rerank评分机制解析

qmd检索结果解释:--explain参数与RRFrerank评分机制解析 【免费下载链接】qmd mini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local 项目地址: https://gitcode.com/GitHu…...

Windows更新修复利器:Reset Windows Update Tool终极使用指南

Windows更新修复利器:Reset Windows Update Tool终极使用指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool Wind…...

C++27异常处理增强配置(ISO/IEC 14882:2027草案第12.8节深度解密)

第一章:C27异常处理增强配置的标准化演进脉络C27标准委员会在异常处理机制上引入了关键性配置抽象,旨在统一跨编译器、跨平台的异常行为语义。核心演进方向聚焦于将异常传播策略、栈展开控制与诊断信息生成三者解耦,并通过标准化属性和编译期…...

Jupyter Notebook安全配置全攻略:如何在Linux上设置密码保护与远程访问

Jupyter Notebook安全配置全攻略:如何在Linux上设置密码保护与远程访问 在数据科学和机器学习领域,Jupyter Notebook已经成为不可或缺的工具,它提供了交互式编程环境,让开发者能够轻松地进行数据探索、可视化和模型训练。然而&…...

从进度到资源:7款适合PMO的项目集管理系统

本文将深入对比7大项目集管理系统:PingCode、Worktile、GanttPRO、奥博思、TAPD、Trello、氚云 在管理大型、跨部门的复杂项目时,PMO(项目管理办公室)常面临资源冲突、信息孤岛和进度失控的挑战。传统的单项目管理工具已难以承载组…...

保姆级教程:在Ubuntu 22.04上从源码编译安装Micro XRCE-DDS Agent(附虚拟机环境配置)

从零构建嵌入式通信桥梁:Ubuntu 22.04源码编译Micro XRCE-DDS Agent全指南 当AURIX Tricore这类嵌入式设备需要与复杂系统对话时,XRCE-DDS就像一位专业翻译官。想象一下,你的开发板是个只会说方言的本地向导,而云端服务是个讲标准…...

跨越平台鸿沟:在非ROS环境中通过Rosbridge与ROS 2 Humble高效通信

1. 为什么需要Rosbridge? 在机器人开发领域,ROS 2 Humble已经成为主流操作系统之一。但现实情况是,很多开发者可能需要在Windows、MacOS甚至是没有安装ROS的Linux环境下工作。这时候就面临一个难题:如何让这些非ROS环境与ROS 2系统…...