尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
从零开始学Linux(十一)
前十天把Linux系统管理和Shell编程的基本功过了一遍从虚拟机安装到用户权限管理从文件操作到结构化命令总算是能写一些像样的脚本了。但课程推进到第三周突然换了个方向从Shell脚本跳到了数据结构与算法。说实话一开始有点懵感觉Linux还没学透怎么就开始搞算法了。后来理解了这套小学期的设计思路其实是先搭环境、再练命令、最后用编程来解决实际问题前面学的Shell脚本算是给后面打基础的过渡。这周的主要内容是数据结构概述、数组基础知识、二分查找和移除元素对应着LeetCode上的704题和27题。今天先把这块的内容整理出来。先说说数据结构是什么。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。这些数据元素不是孤立存在的而是有着某种关系这种关系构成了某种结构。Pascal之父尼古拉斯·沃斯有一个著名公式程序 算法 数据结构。这个公式把程序设计的两个核心要素说得非常清楚数据结构和算法缺一不可数据结构是组织数据的方式算法是处理数据的方法。数组是最基本的数据结构。数组是n个相同类型数据元素构成的有限序列逻辑表示为A(a1, a2, ..., an)。数组有一个很重要的特性叫随机访问一旦a1的存储地址确定并假设每个数据元素占用k个存储单元则任一数据元素ai的存储地址就可由公式LOC(ai)LOC(a1)(i-1)*k直接计算出来。这意味着数组中任一数据元素都可以直接存取不需要从头遍历去找所以数组是一种随机存储结构。在Python中数组对应的是列表类型列表的基本形式是一个方括号内以逗号分隔的若干值而且Python的列表不需要所有值都是相同类型这一点比C语言灵活不少。前面学的顺序查找其实就是遍历数组逐个比较直到找到目标值。我在脚本里用循环遍历数组元素的时候本质上就是顺序查找的思路。Python代码实现起来很直观定义一个函数sq_search(R, n, k)从表头开始逐个比较找到就返回逻辑序号找不到就返回0。这种方法在数据量小的时候没什么问题但如果数据量大了效率就不够看了。二分查找就不一样了它是一种效率较高的查找方法但前提是顺序表中的元素必须是有序的。假设有序顺序表是递增有序的基本思路是确定当前查找区间的中点位置mid然后将待查的k值与R[mid]比较。如果相等就找到了如果R[mid]大于k说明k在左子表新的查找区间是low到mid-1如果R[mid]小于k说明k在右子表新的查找区间是mid1到high。每次查找都让区间缩小一半所以效率比顺序查找高很多。课件里用有序序列2,4,7,9,10,14,18,26,32,40演示了查找7的过程。第一次mid是5R[5]14大于7所以去左子表第二次mid是2R[2]7找到了总共只比较了两次就找到了目标。用Python实现二分查找有两种常见的区间定义方式。左闭右闭的写法是定义target在[left, right]区间里while循环条件是left right因为left等于right时区间里还有一个元素。当nums[middle]大于target时right middle - 1因为middle已经检查过了不在新的区间里。左闭右开的写法是定义target在[left, right)区间里while循环条件是left right因为left等于right时区间是空的。当nums[middle]大于target时right middle因为右开区间不包含right。两种写法边界条件稍微不同但核心思想是一样的。移除元素这道题要求原地修改输入数组不使用额外的数组空间只使用O(1)的额外空间。暴力解法的思路是遍历数组找到等于目标值的元素然后把后面的元素依次向前平移一位数组长度减一。但这种方法时间复杂度是O(n²)因为每次删除都要移动后面所有的元素。快慢指针法更优雅一些快指针遍历整个数组慢指针用来收集不等于目标值的元素。如果快指针指向的值不等于目标值就把它赋值给慢指针指向的位置然后慢指针加一。这样一趟遍历下来所有不等于目标值的元素都被挪到了数组前面慢指针的值就是新数组的长度。时间复杂度O(n)比暴力解法高效不少。把数据结构这块和之前学的Shell脚本串起来看shell脚本里的数组本质上就是数据结构里的数组概念在具体编程环境中的体现。之前用循环遍历数组、用if判断条件、用变量存储数据其实都是在应用数据结构和算法的思想。二分查找的核心思想是每次排除一半的数据这种分治策略在Shell脚本里也可以实现只不过实现起来不如Python方便。接下来的学习要进入Python编程实战了数据结构与算法这套体系是计算机专业的核心基础打好基础后面学什么都更顺畅。希望这篇文章能给正在入门数据结构的同学一些参考有问题欢迎来交流。
RELATED

相关推荐

Archify 开源项目深度解析:从代码到架构图,一键生成可视化文档

Archify 开源项目深度解析:从代码到架构图,一键生成可视化文档

一、项目简介 Archify 是一个开源的架构文档自动生成工具,能够从代码库中自动提取项目结构、模块依赖关系,并生成清晰的可视化架构图。它解决了开发团队在项目迭代过程中文档滞后、架构图手工绘制耗时且容易过时的问题。通过 Archify,开发者…

📅 2026/9/8 11:44:17
做数字产品的核心内容--数据的设计与展示

做数字产品的核心内容--数据的设计与展示

在之前了解到b端,作为数据的操作系统 c端作为入口 我们在接着一层理解数字系统的设计 我们这里讨论一下: 对于成规模数据的设计 就是,要把数据要封装成一个一个条种类 我们举个例子 这些东西,没办法一概而论 都是有固定的模版 我们…

📅 2026/9/21 11:33:22
LibreOffice与ONLYOFFICE实测:开源Office选型与在线协作部署指南

LibreOffice与ONLYOFFICE实测:开源Office选型与在线协作部署指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/7 13:37:03
MORE NEWS

更多资讯

📰

从单模型服务到LLM推理平台:模型部署框架全貌拆解

做模型部署做久了,你会发现一个尴尬的事实:在开发环境里跑通一个模型,和生产环境稳定服务一个模型,完全是两回事;而稳定服务一个模型,和把几十个大大小小的模型统一接入、统一调度、统一监控,又…

📰

MySQL表查看方法全解析:从基础到高级技巧

1. MySQL表查看方法全解析 作为关系型数据库的典型代表,MySQL的表管理是日常开发中最基础也最频繁的操作之一。当接手一个新项目或维护现有系统时,快速了解数据库中有哪些表、它们的结构如何,是每个开发者必须掌握的技能。本文将详细介绍MySQ…

📰

TFLite内存规划器详解:复用张量按生命周期压峰值内存

做端侧推理的兄弟应该都体会过这种场景:模型导出很顺利,板子上一跑就 OOM;或者只是把输入分辨率从 320 提到 416,内存直接翻倍。遇到这种问题,大多数时候不是算力不够,而是中间张量被无谓地“一人占一个坑”…

📰

不买转接盒:Android车机静态工程评测与接收端实现

1. 拆解这个标题背后的真实需求 第一次看到“DiPlay 静态工程评测”这个说法,很多人会以为又是一个车机投屏的教程。但把标题拆开看,核心其实落在三个词上: 静态工程评测 、 不买转接盒 、 Android 车机扮演接收端 。这三个词组合在一起…

📰

只检查放行项,还不知道漏掉了什么

2026-11-02更新:0.2.0新增有限输入集合的precision和recall逻辑界限。下面保留0.1.0原始发布记录,新版方法与限制见末节。 0.1.0:原始发布记录 我发布了 Rejected Check Audit,一个用来检查多阶段筛选分母的离线工具。它保留前置…

📰

FAST-LIO源码精读:从李群李代数到ikd-tree调参排错

简介:面向FAST-LIO论文阅读与源码剖析的中文学习文档,适合已具备ROS、C和SLAM基础,希望打通激光惯性里程计理论推导与工程实现的读者,也可供初学激光雷达惯性建图者作查漏补缺之用。内容先从李群李代数、流形、点云数据格式及VLP-…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬