LeetCode排序章:算法与生活的共鸣

(这份随想记录于2026.02.23,最近在整理学习笔记时再次感觉枯燥的数据结构与算法竟然也能讲解这么有意义,于是二次整理准备发出来) 新年假期将数据结构与算法的主体内容复习完毕,之后每天做几题保持手感,便不再投入过多精力于LeetCode——终于,真正开始AI与机器人领域的学习了。 最后几天读到《排序算法》章末,颇受触动。这段文字将数学原理讲得通透,又不失幽默,且意涵早已超越算法本身,引人反观生活。 二分思想部分,”一尺之捶,日取其半,logn世竭”的化用让我想到:许多被奉为人生哲理的大道理,在数学家眼中不过是可推导的逻辑,并无神秘可言。这让那些听起来格外抚慰人心的华语骤然褪色——一切皆有章法。我想,数学家的孤独或许正源于此:身心灵的慰藉在此处失效,唯有逻辑冰冷而诚实地运转。 “治”的过程被比作《活着》里的那句话:”小鸡长大了就变成了鹅,鹅长大了,就变成了羊,羊再长大了,就变成了牛……”初读只觉无厘头,下一秒却像被什么戳中了——这不就是文学版的量变引起质变吗?所有的成长都不会浪费,只要持续积累,终会有一个奇点让过往悉数兑现。 后文的猴子排序听着荒诞,却真有严谨的数学家亲自实践。一本正经地做无厘头的事,严肃得好玩。至于睡眠排序,读完后我想:若我是老板,手下员工交出这等算法,我必深吸一口气告诉自己莫激动——问题终究是能解决的,无非慢些。员工既是我招的,他们能想出如此”优秀”的算法,也有我的一份”功劳”。 最后的奇迹排序像是全章的升华。时间复杂度为正无穷的算法,竟能被写进教材,其价值已上升到人生哲理的高度。作者总结:若只是等待、什么也不做,终将一事无成。但我觉得这解读稍嫌狭隘。正如猴子排序——等待够久,说不定宇宙射线就让内存bit位翻转、数据自愈了呢?真正上过班的人或许有类似体验:一个棘手的难题搁在那儿,过段时间竟自然而然消解了,或问题本身就不复存在了。这难道不是奇迹算法的某种应用?甚至,难题放久了,工作没了,或公司没了,算不算某种维度的”解决”? 当然,最后这部分纯属开脑洞,当不得真。遇到问题,最优解仍是正面应对——就像我现在想换工作,虽然有了AI,虽然之后大部分是Vibe Coding,但是作为基本功测试必过在线测评,既然绕不开刷题,便坦然拥抱,将能做的事做到最好。与君共勉。 (排序算法章节内容节选,原文链接见文末) 归并排序: 总结起来,归并排序分成两步,一是拆分数组,二是合并数组,它是分治思想的典型应用。分治的意思是“分而治之”,分的时候体现了二分的思想,“一尺之棰,日取其半,logn 世竭”,治是一个滚雪球的过程,将 1 个数字组成的有序数组合并成一个包含 2 个数字的有序数组,再将 2 个数字组成的有序数组合并成包含 4 个数字的有序数组…如《活着》一书中的经典名句:“小鸡长大了就变成了鹅;鹅长大了,就变成了羊;羊再长大了,就变成了牛…” 猴子排序: 1913 年,法国数学家埃米尔·博雷尔出版了一本谈概率的书籍,其中介绍了「打字的猴子」概念,引发了「无限猴子定理」这个有趣的实验构想。 无限猴子定理:让一只猴子在打字机上随机地按键,当按键时间达到无穷时,几乎必然能够打出任何给定的文字,比如莎士比亚的全套著作。 这个理论说明「把一个很大但有限的数看成无限」的推论是错误的。猴子精确地通过键盘敲打出一部完整的作品发生的概率是极其低的,但并不是零。 2003 年,普利茅斯大学艺术媒体实验室课程的教师和学生使用 2,000 英镑津贴做了这个实验,结果打出了 5 张几乎全是S的纸,没有一个完整的句子。 无限猴子定理启发出了一个排序算法:把待排序的数组交给猴子,只要猴子不断地打乱数组,总会有一次排序成功!这个算法被称为猴子排序,英文名是 bogo-sort(英文名源于 Quantum bogodynamics)。其中,可以使用「快速排序」章节中介绍的洗牌算法来打乱数组。 Random random = new Random(); private void bogoSort(int[] arr) { while (true) { if (isAscendingSorted(arr)) break; shuffle(arr); } } public […]

LeetCode排序章:算法与生活的共鸣 Read More »

ROS2学习笔记:C++最小支持Parameters的节点

通过如下命令新建一个package框架: ros2 pkg create –build-type ament_cmake –license Apache-2.0 cpp_parameters –dependencies rclcpp 支持Parameters的最小节点源代码: #include <chrono> #include <functional> #include <string> #include <rclcpp/rclcpp.hpp> using namespace std::chrono_literals; class MinimalParam : public rclcpp::Node { public: MinimalParam() : Node(“minimal_param_node”) { auto param_desc = rcl_interfaces::msg::ParameterDescriptor{}; param_desc.description = “This parameter is mine!”; this->declare_parameter(“my_parameter”, “world”, param_desc); timer_ = this->create_wall_timer( 1000ms, std::bind(&MinimalParam::timer_callback, this)); } void

ROS2学习笔记:C++最小支持Parameters的节点 Read More »

电波表调时区

前几天在老家看到墙上一块小时候就有的石英钟,好多年过去了走得还非常准,于是我问爸妈这块表哪儿来的,爸爸回答道是他当时从县里百货大楼买的,80块钱,日本表,年龄应该和我一样大了,并且还说不仅准还省电,一节5号电池用一两年。于是我又端详了一会儿,三十多年过去了,这块表依旧能感觉出来其真材实料的质感。想到我现在也有了自己的家,但是家里墙上一块表也没有,有想法我也有了买个能够经历岁月洗礼的挂钟的想法。 于是我从日本亚马逊直邮了一个SEIKO精工品牌的表,看照片就很喜欢,等拿到实物更加是觉得精美但又克制,是我期待的能够在家里用几十年的挂钟。 我买的这款可以接收送信所发出的无线电波实现时间校正,塔台虽在日本福岛和九州,可中国沿海大部分城市也能在空旷地方收到信号,我试了在北京也是能接收的,从而实现精准时间设置。可是自动对时有一个巨大的问题就是同步的时间是日本时间,和中国时差有1小时,所以“分秒”会很精确但是时间上比北京时间快一小时。 于是我得想办法调个时区。 首先将电池拆下再重新装回,在室内接收到电波之前,表针会自动回到12点时刻,此刻立刻再次拿掉电池。然后将背面的几个螺丝拆掉,这样子稍微晃一晃外边一圈的木框就能轻轻拿下来: 拆完木框后轻轻将表盘玻璃也可以扣开,该玻璃和表盘是通过双面胶固定的: 接下来就该调时区了,断电情况下,分针和秒针保持不变,将时针往前拨一小时,即将12点拨成11点: 再将玻璃片以及木框擦干净,原位装回,这样就时区调好啦: 最后装回电池,放在窗户边开阔处,等待电波同步,至此就一台非常精准北京时间的电波挂钟就设置完啦。拿在手里越看越喜欢我选的这个款式,你们觉得怎么样呀。  

电波表调时区 Read More »

在Jetson Orin Nano上基于Ollama私有化部署OpenClaw

媳妇工作需要调研AI,尤其OpenClaw在工作场景中的应用。不少帖子建议买个Mac Mini小巧省电24小时待机,我手头正好有个闲置的Nvidia Jetson Orin Nano 开发板,性能也强的很67 TOPS,打算拿来用作本地部署的载体。在此记录一下过程,小伙伴有闲置Jetson也可以参考一下利用起来。 对于一个新拿到手的Jetson Orin Nano Developer Kit,官方的NVIDIA SDK Manaer真是好使用,媲美树莓派的官方系统烧录工具,基本上就说鼠标点点点就行了。如果硬盘足够的话建议在工具页面将所有的依赖都一次性都勾上都安装好,省的系统装好后再费劲解决CUDA、cuCNN等依赖。 系统装好后,插上网线,从路由器端找一下IP,登录就可以开始装OpenClaw和基于Ollama的本地大模型了。先使用Ollama本地部署大模型,目前Ollama已经给Jetson适配过了从而调用GPU,如果看脚本中也可以看到对于Jetson使用的是Jetpack的环境而不是自己装的CUDA环境,直接运行就OK: curl -fsSL https://ollama.com/install.sh | sh 从安装进度可以看到过程中下载安装了Jeston独有的一些库: jetson@ubuntu:~$ curl -fsSL https://ollama.com/install.sh | sh >>> Cleaning up old version at /usr/local/lib/ollama >>> Installing ollama to /usr/local >>> Downloading ollama-linux-arm64.tar.zst ######################################################################## 100.0% >>> Downloading ollama-linux-arm64-jetpack6.tar.zst ######################################################################## 100.0% >>> Creating ollama user… >>> Adding

在Jetson Orin Nano上基于Ollama私有化部署OpenClaw Read More »

Copilot初始化技巧

最近的一个学习项目使用VS Code和Copilot为主要开发环境,Vibe Coding真是大大提高生产力,这个项目几乎99%的代码都是AI写的,整体来说是一个结伴编程的模式,我充当整体架构把控,AI帮我每个模块每个模块来实现。这个项目很复杂,持续了几个月,而VS Code的Copilot上下文很可怜,所以我充分使用了大量markdown文档记录进度记录plan,也用到了copilot-instructions.md 来让Copilot每次对话开始时主动读取一些规范性背景性得文档。可是实际用下来到你觉到大模型仅止步于此,并没有主动执行读各个模块的plan/progress的步骤。所以每次重启IDE后,模型感觉都很弱智,说了解背景也了解一点,但是不多。 解决首次开IDE后AI大模型对于记忆丢失的问题,一个解决方法是将项目重要背景以及当前进展写入copilot-instructions.md,但是这会使这个文件超级臃肿,另外一方面是我现在用到了,创建一个prompt脚本,每次新打开IDE手动运行一下,一方面让Copilot真正读一下其他的几个plan/progress文档,另一方面给我们一个当前状态的总结。 /session-start 使用这套模式主要是由于Copilot对于历史记忆做的不好,另外这套模式能够生效的一个前提是plan/progress文档能够及时且准备更新,我是通过一个skills完成的,当和大模型说特定命令,大模型就会逐个将模块中各自的以及项目整体的plan/progress根据当前的修改完成更新: 这是我使用VS Code Copilot的一些心得,如果对你有用,帮忙点个赞吧。      

Copilot初始化技巧 Read More »

Jetson Orin Nano安装Pytorch CUDA环境

最近在学习大模型在机器人上边的应用,想着通过一个能够自己设备训练的模型以及Jetson来体验一遍整个模型从训练到部署的全流程。前期都是在一台高性能工作站上边学习的,X86下对于配置环境以及解决依赖等问题相对还是好解决的,毕竟用户基数大。多数情况遇到的一些运行问题,结合大模型以及Github的评论区,很快就有解决方案的。之前了解到Jetson是英伟达自己出的产品,CUDA环境方面应该不是啥大问题,可事实真的很打脸,在我将模型训练摸索差不多,在服务器可以稳定运行后,打算挪到Jetson上边运行过程中真的费了好大的劲。于是我记录一下,说不定有其他朋友遇到同样的问题。 我拿来学习的是SmolVLA这个机器人大模型,使用的是最最常用的Pytorch框架,这个在Jetson上安装CPU版本很顺利,基本上从pip或者conda直接安装都OK,关键在对于Jetson的CUDA加速版本的Pytorch,由于是ARM架构而不是常见的X86, pip及conda库默认是没有的。想完全按照大模型指导推荐的版本安装几乎是不可能,我摸索了几天终于是找到了行得通的解决方案。 首先安装Jetson 平台专用的软件开发套件(SDK),通过这个过程可以装上绝大多的依赖库: sudo apt install nvidia-jetpack 然后通过命令检查当下的CUDA版本: nvidia-smi 最后在半官方的论坛安装编译好的适配Jetson ARM架构的Pytorch以及Torchvision包: pip install torch torchvision –index-url https://pypi.jetson-ai-lab.io/jp6/cu126 在上边步骤完成后,Python导入torch会提示有一个cuDSS相关的动态链接库找不到,从Nvidia官方论坛下载: https://developer.nvidia.com/cudss-downloads 至此已经可以在Jetson上使用CUDA加速版本的Torch来运行模型了。总结下来简单的几步,但是卡了我好几天,反思下来就说对大模型太过于依赖,甚至是过于信任大模型实时网页搜索的能力。可能是由于Jetson资源相对较少,被多数X86环境配置帖子稀释的原因,大模型给的绝大多数链接都是不能用的,要不货不对板好不失效。并且解决方向也有问题,遇到Pytorch 2.6找不到就推荐降级,而低版本的ARM版本CUDA Torch Torchvision也全网很难找到资源。可能Torch还好,对于Torchvision编译好的wheel包真的很少很少。在我找到https://pypi.jetson-ai-lab.io/jp6/ 半官方的资源站后,提供的是最新版Pytorch 2.10版本,安装后提示缺cuDSS相关的包,此时大模型给出的强烈建议是不要用最新的2.10版本torch,说唯一可行的就说用旧版本,因为2.10太新了缺乏的包绝大多数情况需要自己编译,这个在jetson本身条件下几乎不可能。我被说服了用了一整天时间找旧版本的包,真是找不到。没辙我去到了Nvidia官网看论坛,想着是这么常见的问题,不应该只有我遇到。果然翻了几个帖子就看到Nvidia官网已经提供了最新的cuDSS编译好的安装包。 想在这里感慨以下就是大模型用多了对于搜索引擎的使用能力都快倒退了。很多时候大模型对于网络资源搜索很有限,搜出来结果很肤浅,并且一些论坛似乎对于大模型也不友好,很多搜不到或者说需要登陆才能查看。对于一些相对小众的领域,感觉逛论坛寻找解决方案还是必不可少的,大模型并不是每个细枝末节都是专家,尤其涉及软硬件结合的,感觉coding工具发挥能力就被很大限制了。     Reference: https://pypi.jetson-ai-lab.io/ https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html https://forums.developer.nvidia.com/t/jp-6-1-torchvision-error-when-built-from-source/314940 https://forums.developer.nvidia.com/t/problem-with-installing-torchvision-on-jetson-orin-nano/312860 https://forums.developer.nvidia.com/t/https-forums-developer-nvidia-com-t-installing-torch-and-torchvision-on-orin-nano-335317-u-joel-alejandro11366/346925/2 https://pypi.jetson-ai-lab.io/jp6/cu126 https://developer.nvidia.com/cudss-downloads?target_os=Linux&target_arch=aarch64-jetson&Compilation=Native&Distribution=Ubuntu&target_version=22.04&target_type=deb_local https://forums.developer.nvidia.com/t/help-me-with-correct-pytorch-and-torchvision-versions-requirement-for-jetpack-6-2-1-orin-super/343688/15 https://forums.developer.nvidia.com/t/pytorch-and-torvision-version-issue-runtimeerror-operator-torchvision-nms-does-not-exist/312446  

Jetson Orin Nano安装Pytorch CUDA环境 Read More »

大模型学习笔记:Agent智能体

概念: 智能体(Agent)是一种能够自主规划、决策、执行任务的组件,核心是让大预言模型(LLM)根据任务需求,选择并调用工具,完成单靠模型自身无法解决的复杂问题。 没有Agent时,LLM只能基于自身训练数据回答问题,遇到需要实时数据、复杂计算、外部工具调用的场景就会卡壳。 有了Agent后,LLM就像一个“指挥官”,能思考任务步骤–>选择合适工具–>执行工具调用–>根据结果调整策略,直到完成任务。 核心特点: 目标驱动:围绕用户的具体任务目标展开工作 工具调用能力:能连接外部工具,弥补LLM的局限性 自主决策与迭代:不需要人工干预,能根据工具返回的结果,判断是否需要继续调用工具,或直接生成最终答案 核心区别: 普通Chain: 执行流程固定,按预设步骤运行 工具调用路径写死在代码里 适合简单,标准化任务 Agent: 执行流程动态,根据任务和结果自主调整 工具选择由LLM思考决定 适合复杂、多步骤、需要决策的步骤 Agent智能体 = 大语言模型(大脑)+ 工具箱(手脚)+ 决策逻辑(思维),让大模型拥有了感知外部并影响现实的能力 Agent初体验   from langchain.agents import create_agent from langchain_community.chat_models.tongyi import ChatTongyi from langchain_core.tools import tool @tool(description=”获取天气信息的工具”) def get_weather(location):     # 这里可以调用天气API获取天气信息,暂时返回一个模拟的结果     return f”{location}的天气是极端狂风暴雨天气,超级强度雷电以及超大降雨量” agent = create_agent(     model=ChatTongyi(model=”qwen3-max”),    

大模型学习笔记:Agent智能体 Read More »

大模型学习笔记:LangChain 文档加载

Document loaders文档加载器:文档加载器提供了一套标准接口,用于将不同来源(CSV,PDF或Json等)的数据读取为LangChain的文档格式。这确保了无论数据来源如何,都能对其进行一致性处理。 文档加载器(内置或自行实现)需实现BaseLoader接口。`Class Document` 是LangChain内文档的统一载体,所有文档加载器最终返回此类的示例。一个基础的Document类实例,基于如下代码创建: from langchain_core.documents import Document document = Document( page_content = “Hello, world!”, metadata={“source”: “https://example.com”} ) from langchain_community.document_loaders import CSVLoader loader = CSVLoader(     file_path=”./data/stu.csv”,     csv_args={         “delimiter”: “,”,         “quotechar”: ‘”‘,         #无表头可以使用,不然表头会当作数据加载进来         “fieldnames”: [“id”,

大模型学习笔记:LangChain 文档加载 Read More »

大模型学习笔记:RAG项目

RAG即检索、增强和生成,其主要分为2条线: 离线处理:向私有知识库(向量存储)源源不断添加私有文档 向知识库添加来自未来的知识文档(基于模型训练完成时间) 向模型添加私有知识文档 给出模型参考资料,规避模型幻觉(一本正经胡说八道) 在线处理:用户提问会先基于私有知识库做检索,获取参考资料,同步组装新提示词询问大模型获取结果。 在线流程:

大模型学习笔记:RAG项目 Read More »

大模型学习笔记:Vector Stores 向量存储

下图为典型的向量存储应用,即典型的RAG路程: 上图为典型的向量存储应用,即典型的RAG路程。开发设计: 如何文本转向量 创建向量存储,基于向量存储完成: 存入向量 删除向量 向量检索 LangChain内置向量存储功能, 可以基于: InMemoryVectorStore, 完成内存向量存储 Chroma, 外部数据库向量存储 向量存储类均提供3个通用API接口: add_document, 添加文档到向量存储 delete,从向量存储删除文档 similarity_search:相似度搜索 from langchain_chroma import Chroma from langchain_community.embeddings import DashScopeEmbeddings from langchain_community.document_loaders import CSVLoader #Chroma 向量数据库(轻量级) #依赖langchain_chroma,chromadb vector_store = Chroma(     collection_name=”my_collection”,  #集合名称,类型:str,默认”langchain_store”     embedding_function=DashScopeEmbeddings(),  #用于生成向量的嵌入函数,类型:BaseEmbeddings,默认None     persist_directory=”./chroma_db”,  #持久化目录,存放文件夹,类型:str, ) “”” loader = CSVLoader(    

大模型学习笔记:Vector Stores 向量存储 Read More »