算法学习从放弃到入门的第一步,我花了 42 天终于走完了

DQN(Deep Q-learning)从入门到放弃笔记 阅读详情

你是不是像我一样,是一名算法学习困难户,每一次都满怀希望地开始,却又每一次失望地结束。

如果这听起来很熟悉,那么这篇文章正是为你而写。我们将以全新的视角来探究算法,采用一种更符合我们大脑自然思维方式的学习方法。

我们将追溯排序算法的源头,探讨它们在当代编程应用中的演变。每一个环节都充满挑战和启发。

让我们追随那些伟大的算法先驱,揭开数据排序的秘密,理解它们的本质,尝试真正地走入一次算法学习的大门。

01 算法学习的困惑

打开任何一本算法相关的书籍,我们常常看到它们从排序算法讲起。我一直有这么一个困惑,不知道你有没有,就是为什么要学习排序算法?

对于程序员而言,排序是一个简单的任务,比如 SQL 中使用“ORDER BY”,或者代码中使用“sort()”方法,就可以快速完成排序。

更让人觉得可气的是,认真学习一段时间后,我们发现书上学来的排序算法,性能完全比不上这些简单的调用。

这会让人很有挫败感,因为算法学习逐渐从实用驱动,变成了面试驱动,它成为了检测你学习和理解能力的工具。

此外,算法的固有复杂性确实使得其学习成为一项挑战。当学习变得抽象且缺乏直接的应用价值时,大多数人的学习方法也变成了死记硬背,学完就忘。

一不小心,学习算法就像学习英语一样,一次次地翻开书本,一次次地背到“abandon”后就无疾而终了。

有没有一种可能,学不好算法的原因不是因为我们自己,而是教科书的教学方式本身就是错的?

02 学习算法就是学习历史

为什么简单调用一个排序方法,其性能会超过许多教科书上的算法呢?

答案其实很简单:这些书中的算法大多源于上世纪五六十年代,而你所调用的,则是经过无数工程师优化之后的现代算法。

计算机发展的时间太短了,让人很容易忽略它也是有历史的。

以数学为例,我们可以更容易理解这一点。古希腊哲学家芝诺对无穷悖论的探索,与牛顿和莱布尼茨对无穷问题的处理,显然是不一样的。

你也许没听说过芝诺这个名字,因为在微积分的教科书中很少提及。然而,在介绍微积分发展历程的书籍里,他是绝对不能缺席的。

从问题到答案的过程中,人类对无穷问题的理解是渐进式的。但教科书往往只给我们最终的答案和方法,忽略了其中的思维过程。

算法书籍也存在这样的问题。书中对每个算法的介绍都很详尽,但它们略过了这些算法的发展历史,其诞生和演变的过程,以及可能走过的弯路。

这非常不符合人类大脑学习和记忆的过程。如果我们将这一环节补上,将算法学习视为一次历史之旅,会怎样呢?

重走一遍从无到有的发现历程,深入理解其中的思考过程,不仅有助于我们掌握算法的逻辑本质,也有利于理解计算机思维。

03 数据大爆发

在计算机时代到来之前,你有没有想过数据是如何被排序的?

在古代,县衙的书记员会手动将公文、税收等文件进行分类归档,通常依据类别和日期排序,以便于将来的检索。

但是,当数据量增长到超出人力可处理的范围时,应该如何应对呢?

19 世纪末,随着美国人口的快速增长,人口普查的数据处理成为了一项巨大的挑战。

从 1870 年的 5 个调查科目增加到 1880 年的 200 多个,仅完成 1880 年人口普查的工作就耗时长达 8 年,数据量的大爆炸成为了当时急需解决的问题。

当时,数据被记录在打孔卡片上,每张卡片上的孔洞代表了不同的信息。

面对成堆的打孔卡片,如何有效进行排序成为了一个问题,比如如何根据年龄对卡片进行排序。

图片

数字 1 的打孔方式

IBM 提供了一种解决方案,即 IBM Sorter 机器,专门用于对打孔卡片进行排序。

IBM Sorter 的工作原理,实际上是基数排序(Radix Sort)的一个物理实现。

机器拥有 13 个口袋,其中 12 个用于分类卡片上对应的十二行的信息,还有一个口袋用于处理空白、拒绝和错误的卡片。

图片

IBM Type 82 Sorter

在排序开始前,操作员需要设置好机器,以确定哪一列数据将被用于排序。

例如,如果我们首先根据年龄的个位数排序,机器便会按照这一标准运行,卡片将根据年龄的个位数被分配到不同的口袋中。

随后,通过对这些个位数已经排序的卡片进行进一步的排序——这次是依据年龄的十位数,我们可以完成全面的排序工作。

进一步地,IBM 还开发了 IBM Collator,这是一种能够实现两堆已排序卡片合并的机器。

它的工作原理类似于合并排序算法,即将两组已经排序的数据合并成一组有序的数据集。

图片

IBM 088 Collator

这些机械式的排序方法,效率远远高于当时的人力,它们向我们展示了利用机械化手段处理大规模数据的可能性。

在计算机发明之前,我们已经能够见证基数排序(Radix Sort)和合并排序在现实世界中的应用。

这不仅是对技术创新的一种展示,也反映了算法和数据处理技术的发展是一个长期而渐进的过程。

04 拯救计算机的算力

在20世纪40年代,计算机的诞生开启了数字处理的新时代。

早期的计算机通过数字逻辑电路执行计算任务,如求解微分方程以计算弹道路径,显示了计算机在处理复杂计算方面的巨大潜力。

计算机设计中的逻辑和数学问题引起了冯·诺依曼的兴趣。

作为研发小组的顾问,他试图解决早期计算机设计中的缺陷,并最终提出了存储程序计算机概念,即著名的冯·诺依曼架构。这一架构为现代计算机的设计奠定了基础。

为验证这种设计的实用性,冯·诺依曼选择排序作为主题,通过比较计算机执行这些算法的时间与 IBM Collator 这类专用排序机的处理速度来展示计算机的效率。

这也是冯·诺依曼写的第一个程序,当年是写在手稿上,高德纳发现后将其改写为符号化的汇编语言。

图片

冯·诺依曼合并算法手稿

人们逐渐发现计算机不仅能完成简单的数据合并任务,还能实现更复杂的完整排序过程。

数据不再存储在卡片上,而是直接保存在连续的内存中,可以通过指针移动来进行排序,从而产生了诸如冒泡排序、选择排序和插入排序等简单的排序算法。

这些基本的排序方法,它们像打麻将时整理牌一样,在内存中重新排列数据。

随着计算机的普及,研究人员发现,大量的计算机算力被用于执行排序操作,估计高达 30% 的算力用于此目的。

这促使了排序算法进入内卷的时代。

为了优化算力的使用,开发者开始探索新的算法,比如使用递归和分治编程技巧的归并排序。

图片

动图 归并排序的实现

归并排序算法虽然有效,但也暴露出对内存空间的高需求。

1959年,英国科学家 Tony Hoare 提出了快速排序算法,它基于相同的递归和分治思想,但在内存使用上更为高效。

图片

快速排序(Quick Sort)递归执行示意图

尽管快速排序解决了内存使用问题,但它无法保证排序的稳定性——即无法保证相同元素的原始顺序。

1964 年加拿大科学家 J.W.J. Williams 发明的堆排序,这种算法利用堆这一数据结构,提供了又一种排序的解决方案。

图片

动图 堆排序过程示意图

这些算法各有优缺点,哪种算法更好?评判标准又是什么?

05 建立评判标准

面对不同场景下算法性能的评价问题,计算机科学界长期缺乏一个统一的评价标准。

这一问题引发了广泛的讨论,直到 1965 年,Juris Hartmanis 和 Richard Stearns 提出算法复杂度的概念,为这一讨论提供了新的方向。

最终,高德纳通过引入 Big O 表示法,提出了一种量化衡量算法复杂度的方法,他也因此被称为“算法分析之父”。

图片

高德纳

高德纳提出的算法复杂度分析有两个核心原则:

1. 在评估算法效率时,应考虑处理极大数据量的场景。之所以关注极大数据量,是因为计算机的设计初衷就是为了处理日益增长的数据量。

2. 虽然影响算法性能的因素众多,但它们可大致分为两类:一类是与数据量无关的固定因素,另一类则是随数据量增长而变化的因素。在评价算法优劣时,关键在于考察在处理接近无限大的数据集时算法的表现。

通过这种方法,我们能够将排序算法分为两大类:

时间复杂度为 O(n²) 的算法,如冒泡排序、选择排序、插入排序。

时间复杂度为 O(nlog(n)) 的算法,如归并排序、快速排序、堆排序。

这一划分不仅帮助了研究者和开发者在选择算法时做出更合理的决策,也促进了计算机科学领域对算法性能评价标准的统一,推动了计算机算法的进一步优化和发展。

06 回归排序的本质

在探讨排序算法的发展时,一定会遇到这个问题:是否达到 O(nlog(n)) 的排序算法就是最优?

要回答这个问题,我们需要从头开始,重新审视排序的本质。

排序的核心是确定一组元素间的相对顺序。对于任意 N 个元素,存在 N!(N 的阶乘)种可能的排列,我们的任务是从中找到那唯一满足排序条件的排列。

排序问题可以被认为是确定元素之间的相对顺序。对于任何给定的 N 个元素,都有 N!(N的阶乘)种可能的排列,我们的目标是找出那唯一的一种满足排序需求的排列。

通过比较元素的方式,我们尝试找到这个“最小”的排列。每次比较实质上是一个二选一的决策,就像猜数字游戏中的问题,只有“是”或“否”两种可能。

理想情况下,每次比较都应该将可能性空间平均分割为两半,这是二分法最优解的基础,也是比较排序的本质。

从排序算法的本质出发,我们得出结论:比较排序的理论上限是 O(nlogn)。

究竟哪种排序算法最接近这一理论上限呢?答案是那些每次比较都能尽可能将结果分为两等份的算法。

通过比较我们可以看到优化过的快速堆排序更接近理论上限。

这种对排序本质的探索不仅涵盖了二分法与排序效率的关系,还引出了一个思考:

如果使用三分法、四分法等策略进行排序,是否能进一步提高效率?

答案就体现在线性排序算法中,如 IBM Sort 所采用的——基数排序,它就像是一个多分法游戏。

基数排序之所以效率高,是因为它打破了传统的二分法比较排序算法,采用了多分法,自然地超越了 O(NlogN) 的复杂度上限。

但它也有局限,比如适用于整数和字符串排序,对浮点数和复数排序则可能不那么合适。

通过回归排序的本质,我们不仅理解了比较排序的上限,还拓宽了视野,认识到除了传统比较外,还有其他高效的排序方法。

07 工程学的实用与创新

经过对排序算法历史的回顾,我们还停留在理论知识的学习上,但算法书籍中通常在此就告一段落了。

我们的学习应该不止这些,我们至少能学会应用。但现在我们连自己调用的 sort 方法使用的是什么排序都不知道。

在追求极致效率的今天,现代排序算法已经根据数据量的不同采用不同的排序策略,这种多样化的排序方法被统称为复合型排序算法。

在多数现代编程库中,广泛采用的就是 TimSort 算法——一种融合了插入排序和归并排序优点的复合型排序算法。

这个算法不仅体现了在实用主义基础上的创新,还展示了工程学中对效率和实用性的不懈追求。

图片

TimSort 算法

因此,文章的结尾并不是结束,而是一个新的开始。通过了解 TimSort 这样站在巨人肩膀上的算法,我们可以开启对算法深层次理解和应用之旅。

好了,这就是我花了 42 天,走完的算法学习从放弃到入门的第一步。

希望通过这篇文章,能够鼓励你真正地踏入算法的世界,理解算法背后的原理,应用在实际问题解决中,乃至于在此基础上进行创新和发展。

我的算法学习之路 立即下载

相关推荐

我的算法学习之路-Lucida

面试过程中经常被问到算法相关的问题,经常被问题难多,所以开始找算法相关文档,这篇博客详细总结了大神的算法学习历程

十五天掌握数据结构与算法——入门,理解算法

魏老师学生——Cecil:学习数据结构与算法 如何开发程序?利用图来构造算法算法和算法分析(算法的资源消耗)时间开销空间开销数据结构python对象表示 如何开发程序? 对于开发一段代码,目的都是为了解决一个实质性的问题的,并且问题可以利用数值计算来解决。因为计算机底层只能识别0和1,通过0和1的组合来定义各种各样的数据类型,比如:整型(int、short、long)、浮点型(float)、字符型...

尹江 _ Cecil 1055

STM32H743 ADC多通道采样实战:CubeMX配置+DMA传输避坑指南

本文详细介绍了STM32H743 ADC多通道采样的实战配置,包括CubeMX参数设置、DMA传输优化及常见问题解决方案。重点解析了ADC模块的核心特性、多通道采样序列配置、Cache一致性处理等关键技术,帮助开发者高效实现稳定可靠的模拟信号采集系统。

weixin_29175469的博客 613

为什么算法很难掌握

通过系统的学习和持续的练习,你可以逐步掌握算法。记住,算法的学习是一个积累的过程,不要急于求成,保持耐心和热情!

浅墨的博客 1583

VIVADO网表文件DCP和EDF

为了便于模块化设计,同时保护自己的知识产权,Xilinx VIVADO 提供两种代码封装方法:DCP文件和edf文件。

u014035968的博客 1万+

攻击时间控制的动态逆三维制导律(源代码)

%参考文献:《攻击时间控制的动态逆三维制导律》,哈尔滨工程大学学报,2010 %编程难点:视线坐标系与参考坐标系间的转换关系 一、采用本文方法结果 二、偏航通道采用增广比例导引律

算法小站 2393

强力推荐:算法学习从放弃到入门的第一步,我花了 42 天终于走完了

你是不是像我一样,是一名算法学习困难户,每一次都满怀希望地开始,却又每一次失望地结束。如果这听起来很熟悉,那么这篇文章正是为你而写。我们将以全新的视角来探究算法,采用一种更符合我们大脑自然思维方式的学习方法。我们将追溯排序算法的源头,探讨它们在当代编程应用中的演变。每一个环节都充满挑战和启发。让我们追随那些伟大的算法先驱,揭开数据排序的秘密,理解它们的本质,尝试真正地走入一次算法学习的大门。01算...

dotNET跨平台 187

全面解读AI Infra:架构、生态与未来趋势

文章摘要 大模型时代下,AI基础设施(AI Infra)成为关键技术基建,涵盖从数据准备到模型服务的全栈技术体系。文章系统解构了AI Infra的四层架构(硬件资源层、资源管理调度层、开发框架层、平台工具层),并分析了全球AI Infra生态图谱,包括云计算巨头、芯片厂商等全栈服务商,以及中国特色的多元竞合格局。通过对比Data Infra与AI Infra的核心差异,指出AI Infra更关注智能应用的规模化与自动化。文章还探讨了从传统数据设施向AI基础设施的转型路径,强调自主可控、软硬协同等发展趋势,为

技术引领业务创新 611

可能是关于 kNN 算法最详细的入门总结

【从零开始学机器学习第 10篇】摘要:机器学习最简单算法——kNN 算法总结。对于不少想学机器学习的初学者来说,可能听到「机器学习」四个字就有点发怵,觉得难学门槛高,既...

苏克的博客 3717

RT-DETR改进前必看 - Ultralytics调参 1:1还原RT-DETR官方版本实验环境,更方便改进

的项目文件中集成了YOLOv3v5v6v8v9v10rt-detr11以及其中不同大小的模型结构,更方便我们学习和使用。的参数配置在路径下,其中中设置了模型在训练Train验证Val/Test预测Predict可视化Visualize导出Export超参数Hyperparameters、以及跟踪Tracker的相关参数。在调参过程中主要涉及训练Train和超参数Hyperparameters。下面主要介绍一下初始超参数Hyperparameters。

Limiiiing的博客 7967

(四) OpenClaw-Skill技能全面了解和自定义技能

OpenClaw Skills是提升AI代理功能性的关键模块。本文系统介绍了Skills的核心概念、获取渠道和创建方法。Skills作为标准化指令集合,能让OpenClaw从单纯理解升级为实际执行任务,相比传统System Prompt具有模块化、可复用等优势。用户可通过Clawhub官方商店、GitHub社区等渠道获取5700+现成技能,或按需开发自定义Skill。文章详细演示了创建"Hello World"示例技能的完整流程,包括编写Python脚本、配置SKILL.md文件、部署。

直到世界的尽头 8297

angular要多久学会_学习Angular从入门到放弃

学习Angular从入门到放弃从刚接触Angular到现在,自己也是一路摸滚打爬过来的,虽不是什么高手,单对于如何学习Angular,还是有一些个人的见解,拿出来与大家共勉。学习Angular从入门到放弃,大致有6个过程或者说是6个层次:第一步 了解对于刚接触Angular的新手来说,第一步无非是打基础,也是最重要的一步,决定你要不要继续。(Angular学习门槛略高,不是有意吓你的)在学习之前你...

weixin_39936380的博客 1992

《拉依达的嵌入式\驱动面试宝典》—计算机硬件篇(一)

《拉依达的嵌入式\驱动面试宝典》 整合了所有我认为可能遇到的技术面试问题。所有问题及其答案均是我个人学习后查阅资料总结,每个回答都做了仔细的分析,在嵌入式及其驱动面试相关问题解析做到全网独一无二。学习或者转行到嵌入式、驱动开发领域学习的不二之选

拉依达不拉跨的博客 768

python嵩天第二版第五章_如何避免从入门到放弃——python小组学习复盘

2019年春节python学习行动复盘2019-02-09为了主攻python,没有参加心理学晨读。对心理学也不敢兴趣,怕耽误学习python的时间。那么没学习心理学的情况下,python学的怎么样?是否达到自己的预期?一、预期目标:首先合理预期,肯定不是为了当程序员。现在从头做程序员也没有竞争力。结合已有的工作能力积累,通过学习编程,提升综合竞争力。具体来说,具备基本的编程技能,能开发出提升工作...

weixin_42523260的博客 231

反激电源及其变压器计算与绕制

本内容以一个宽电压输入 24V3A 输出的 72W 反激电源为例来计算电路的各个参数和器件选型,包含反激变压器的计算与绕制方法。

让你爱上电路设计 1938

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何学Python才不会从入门到放弃?大佬定制“新手到大神100天”

今天我们来谈一谈,怎样学Python,才不会从入门到完全放弃 有位叫骆昊 (jackfrued) 的资深程序员,为大家规划了一条从“从新手到大神”的100天 从全方位熟悉语言,到Python的进阶用法,再到天南地北的实战攻略:只要沿着这条路走下去,就都会遇到的。 这个项目已经在GitHub摘下7700星。 骆先生还在日程表的上方,温柔地鼓励了大家: Python是一个...

qq_43058731的博客 404

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

算法从入门到放弃系列--合集(建议收藏)

程序=数据结构+算法 不管你专攻于哪方面,作为一个程序员,算法都是一个最基本的素养,无论是在平时的解决需求,处理bug,还是笔试,面试中,都显得格外重要,所以,快快练就一身好算法吧。 现在,让我们一起康康有趣的算法吧! 0x01.学算法需要什么? 一个有趣的灵魂。 一个聪明的脑袋。 一个端庄的容颜。 一个强硬的身躯。 注意:以上都不需要。 学算法你只需要: 一颗持之以恒的心♥ 0x0...

ATFWUS的博客 2231

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怎样学Python才不会从入门到放弃?大佬定制“新手到大神100天”

假设小偷有一个背包,最多能装20公斤赃物,他闯入一户人家,发现如下表所示的物品。从各类Python库的用法,到决策树、贝叶斯分类、支持向量机这些常用方法,再到机器学习实战,这个章节都覆盖了。从全方位熟悉语言,到Python的进阶用法,再到天南地北的实战攻略:只要沿着这条路走下去,就都会遇到的。这里把Python常用的技术点做了整理,有各个领域的知识点汇总,可以按照上面的知识点找对应的学习资源。光学理论是没用的,学习编程切忌纸上谈兵,一定要动手实操,将自己学到的知识运用到实际当中。初步总结和小测的日子了。

m0_59236602的博客 789

算法之从入门到放弃

前言 该系列笔记意在学习总结数据结构和算法相关知识点、分享竞赛和考研/工作面试中涉及的题目。 该系列文章不定期更新,预计在2021-06-01前全部完成。 以下是相关链接。如有错误,欢迎指正。 文章目录前言1 基础算法1.1 枚举/遍历1.2 模拟1.3 递归&分治1.4 贪心1.5 排序1.5.1 选择排序1.5.2 冒泡排序1.5.3 插入排序1.5.4 计数排序1.5.5 基数排序1.5.6 快速排序1.5.7 归并排序1.5.8 堆排序1.5.9 桶排序1.5.10 希尔

恨鱼腥 349

irrlicht 学习笔记 - 从入门到放弃

irrlicht 学习笔记 - 从入门到放弃 这是一个游戏引擎开发者 irrlicht 的学习笔记 写于最后 花了一天,通过对irrlicht进行粗略的学习。 知道了基本的使用,如何加载资源,创建节点,如何加载地图,GUI,碰撞检测,内置效果,可编程渲染管线,逐像素光照,地形渲染,渲染到纹理,分屏,光照管理,xml文件读写,自定义Mesh,遮挡查询,字体使用与创建等。 但是也发现了一些问题,irrlicht的没有高级的编程思想,仅提供了一些基本的渲染引擎功能,不易扩展。无法支持汉字。从支持的平台以及特性

weixin_43859510的博客 2561

算法从未放弃你,放弃你的只有你自己

我们也应该学会这种专注力,不受外界的干扰和内心的恐惧的影响,坚定地追求我们的目标。我们也应该学会这种专注力,不受外界的干扰和内心的恐惧的影响,坚定地追求我们的目标。无论我们的指令多么复杂或多么简单,它都会认真执行,不会嘲笑我们,也不会因为我们的错误而生气。无论我们的指令多么复杂或多么简单,它都会认真执行,不会嘲笑我们,也不会因为我们的错误而生气。但是,正如算法一样,只要我们不放弃,始终坚守职责,总会有解决问题的方法。但是,正如算法一样,只要我们不放弃,始终坚守职责,总会有解决问题的方法。

2201_75867204的博客 249

机器学习该怎么入门?

​很多人会想着那就要从最基础的知识开始学起!机器学习是一门融合概率论、线性代数、凸优化、计算机、神经科学等多方面的复杂技术。学好机器学习需要的理论知识很多,有些人可能基础不是特别扎实,就想着从最底层的知识开始学起,概率论、线性代数、机器学习凸优化公式推导,等等。 ​

2501_91695155的博客 745

算法-从入门到放弃

算法很重要也很难这个众所周知,不知是幸运还是不幸,现在的企业面试也开始卷算法了。我自己是没什么算法底子,老实说现在让我手写个简单排序我都写不好的,就从这里开始吧。 先放代码地址,拷了好多别人的资料,老实说看的一脸懵,会慢慢删掉别人的参考代码,用自己喜欢的的方式实现一遍的 algorithm: 算法学习及练习 一、等差数列和等比数列 二、从两数之和到abandon 三、数组排序 ...

changgongcheng_yq的博客 842

怎么学Python才不会入门到放弃呢?大佬定制“新手到大神99天”

这个项目已经在GitHub摘下7700星。骆先生还在日程表的上方,温柔地鼓励了大家:Python是一个“优雅”、“明确”、“简单”的编程语言。学习曲线低,非专业人士也能上手。你一定也想知道,这100天都会经历些什么。开始是萌新最初的15天,都是Python语言基础的修炼。

白帽阿叁的博客 177
上一篇: 全中国熬夜看欧洲杯的球迷,都被这个东西硬控了两分钟。
下一篇: 学历差,真别学计算机了?
IT界那些事儿
博客等级 码龄6年 2万+粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值