自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(2963)
  • 资源 (119)
  • 收藏
  • 关注

原创 数据结构与算法分析c语言描述学习:习题 4.28:二叉树里数节点、数叶子、数满节点

题目大意:只给你一棵二叉树的根指针,写出高效的函数,分别算出:这里 NNN 是树的节点个数。三个函数都只把每个节点看一遍,所以都是线性时间。注意:"满节点"只看这个节点自己有没有两个孩子,不要求整棵树是完美的。后面所有手工模拟都用这棵树(6 个节点):用 mermaid 画出来:左右左右右538149按定义数一遍:二叉树本身就是"递归"定义的:一棵树 = 根节点 + 左子树 + 右子树,而左子树、右子树又是更小的二叉树。所以三个问题都可以这样想:nodes(T)=1+nodes(TL)+nodes(TR

2026-10-18 20:21:22 26

原创 数据结构与算法分析c语言描述学习:习题 4.24:在伸展树中删除键 6

#mermaid-svg-t1lLWSjI49BHmINj{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-t1lLWSjI49BHmINj .edge-animation-sl

2026-10-18 20:20:02 90

原创 数据结构与算法分析c语言描述学习:习题 4.22:不用“两次单旋“,直接完成双旋

AVL 树要求每个结点左右子树的高度差不超过 1。插入(或删除)之后某个结点 K3K_3K3​ 失衡,要靠旋转调平。四种失衡情形里,有两种是双旋:通常的写法是把两次单旋叠起来:2. "两次单旋"浪费在哪里数一数两次单旋做的事:把双旋涉及的东西都标出来:三个结点和四棵子树。先看左右情形:其中 T1,T2,T3,T4T_1,T_2,T_3,T_4T1​,T2​,T3​,T4​ 是四棵子树(可以是空的)。把它们的大小关系理一理,从左往右依次是:T1<K1<T2<K2<T3<K3<T4T_1 < K_1

2026-10-18 14:43:29 120

原创 数据结构与算法分析c语言描述学习:习题 4.19:AVL 树的非递归插入

AVL 树是一棵二叉搜索树,要求每个结点左右子树的高度差不超过 1。插入一个数 XXX 时,要做三件事:这段代码里,“往回走"是递归自动完成的:每一层函数调用结束后,自然就回到了上一层,上一层的变量 还在,所以能接着检查、旋转、更新高度,并且把新的根返回给上一层接回去。问题来了:不用递归的话,函数一走到底就回不来了,没人记得"我是从哪些结点走下来的”。递归版里,系统有一个调用栈,帮我们记住了整条路径。非递归版的做法非常朴素:为什么不记方向(左还是右)?因为方向可以现算:比较 XXX 和结点的值就知道

2026-10-18 14:42:16 68

原创 数据结构与算法分析c语言描述学习:习题 4.14:随机二叉搜索树的深度平均是 $O(\log N)$

取 NNN 个互不相同的数,把它们随机打乱顺序,然后依次插入一棵空的二叉搜索树。NNN 个数一共有 N!N!N! 种插入顺序,每一种出现的可能性都一样。这样得到的树就叫随机二叉搜索树。注意,随机的是"插入顺序",不是"树的形状"。同一棵形状可能由好几种顺序得到,所以各种形状出现的概率并不相同。对所有 N!N!N! 种插入顺序,把各自得到的高度加起来再除以 N!N!N!,这就是平均高度 E[XN]E[X_N]E[XN​]。所以题目要证明的是:E[XN]=O(log⁡N)E[X_N] = O(\log N

2026-10-18 14:37:09 177

原创 数据结构与算法分析c语言描述学习:习题 4.10:实现二叉查找树的基本操作

二叉树就是每个结点最多有两个孩子:一个左孩子,一个右孩子,没有孩子就用空指针 表示。BST 在二叉树的基础上加了一条规矩:用 mermaid 画同一棵树:检查一下规矩:找一个数时,每走一步都能扔掉一半以上的候选:比当前结点小就只去左边,比它大就只去右边。如果树比较"平衡",找一个数只需要走大约 log⁡2N\log_2 Nlog2​N 步。数组里我们靠下标 一步一步走。BST 是用指针连起来的,所以本文说的"下标怎么变化",对应到这里就是"指针怎么变化":二、要实现哪些基本操作下面这张表是本题

2026-10-18 14:04:54 291

原创 数据结构与算法分析c语言描述学习:4.6 证明:满节点个数 + 1 = 叶子个数

题目里有三个词,先一个个弄明白:A满B满C一孩D叶子E满F叶子G叶子H叶子ASCII 版本:数一数:把一棵树想成"一点点长出来的"。从只有一个根开始,每次只做一件事:给某个节点添一个新孩子。我们盯着一个量:L−FL - FL−F(叶子数减满节点数)。开始时只有根:L=1L=1L=1,F=0F=0F=0,所以 L−F=1L-F=1L−F=1。之后每添一个孩子,只可能出现两种情况:情况 1:给一个叶子添它的第一个孩子下面给两种证明,都很短。第一种对应上面的"长树"想法,第二种是数边。设 NNN 是节点

2026-10-17 17:30:04 126

原创 数据结构与算法分析c语言描述学习:练习 4.1 树的基础:找根结点和叶子结点

N1N+1N1。

2026-10-17 17:28:55 164

原创 数据结构与算法分析c语言描述学习:B 树:从 2-3 树讲起

MMM。

2026-10-17 12:56:57 251

原创 数据结构与算法分析c语言描述学习:B 树(2-3 树)与树的遍历:从零讲透

前三种都是递归。第四种(层序)不用递归,而是用一个队列:递归背后其实藏着一个栈,层序要的是"先进先出",所以换成队列。每个结点只会被访问一次,而且每次只做常数量的工作:判断是不是 NULL、发起两次递归调用、输出一个元素。总时间=N×O(1)=O(N)\text{总时间} = N \times O(1) = O(N)总时间=N×O(1)=O(N)拿子树 “2(左孩子 1,右孩子 3)” 为例。下面的时序图画的是函数调用的先后顺序:输出顺序就是 1、2、3。注意"输出自己"夹在两次递归中间,这就是"

2026-10-17 12:44:03 303

原创 数据结构与算法分析c语言描述学习:伸展树 4.5.1:一个看起来可行、其实不行的简单想法

二叉查找树(BST)查找一个键,要从根一路往下走,走多少步取决于这个键所在的深度。伸展树(splay tree)的出发点很朴素:旋转是在不破坏二叉查找树性质(左 < 根 < 右)的前提下,改变树形状的基本动作。让 kkk 的左儿子 xxx 升到 kkk 的位置:只做了三件事:完全镜像:让 kkk 的右儿子 xxx 升上来。2.3 记住这个结论把一个节点和它的父亲做一次旋转,这个节点深度减 111,父亲深度加 111。旋转只改几个指针,是 O(1)O(1)O(1) 的操作。要把深度为 ddd 的节

2026-10-17 11:32:45 344

原创 数据结构与算法分析c语言描述学习:AVL 树的双旋转

给 AVL 树TTT插入键值xxx如果TTT是空的,创建新节点返回。如果xxx小于根,递归插入左子树;如果大于根,递归插入右子树;如果相等,什么都不做。递归回来后,检查当前节点有没有失衡(高度差等于 2)。如果失衡,看xxx插在哪里:xxx小于左孩子的键值就是左左(单旋转),否则是左右(双旋转);xxx大于右孩子的键值就是右右(单旋转),否则是右左(双旋转)。更新当前节点的高度,返回当前子树的根。一个很自然的疑问:为什么只比较xxx和孩子的键值就能判断位置?

2026-10-16 18:39:21 162

原创 数据结构与算法分析c语言描述学习: 4.3.5 二叉搜索树的 Delete(删除)

和查找、插入比起来,删除是二叉搜索树里最难的操作。难在哪里?你删掉一个结点以后,树必须仍然满足"左边都比它小,右边都比它大"的规则,而且不能断掉任何子树。这一节先把"删除"拆成三种情况,一种一种讲清楚,再给完整代码。最后还会讲一种很常用的偷懒办法:懒惰删除。删除分两步:叶子没有孩子,没有任何东西需要接,直接删掉就行。父亲原来指向它的那个指针要变成 。例如树里有 的左孩子 (叶子),删除 1 以后, 的左指针变成 。结点只有一个孩子时,这个孩子可以直接顶替被删结点的位置:父亲原来指向被删结点的指针,改成

2026-10-16 18:36:05 165

原创 数据结构与算法分析c语言描述学习:4.2.2 表达式树

一棵二叉树要成为二叉查找树(Binary Search Tree,简称 BST),必须满足下面这条规则:对树里的每一个节点XXXXXX的左子树里所有键值,都小于XXX的键值;XXX的右子树里所有键值,都大于XXX的键值。用公式写出来:对任意节点XXX左子树中所有 keykeyX右子树中所有 key\text{左子树中所有 key} < \text{key}(X) < \text{右子树中所有 key}左子树中所有keykeyX右子树中所有key左小右大。

2026-10-16 13:18:30 58

原创 数据结构与算法分析c语言描述学习:4.1.2 树的遍历,以及一个应用:目录结构

上一节讲的普通树,一个节点可以有任意多个孩子。每个节点最多只能有 2 个孩子。"最多 2 个"的意思是:可以有 0 个、1 个、2 个孩子,但不能是 3 个及以上。左孩子和右孩子。一棵二叉树要么是空树;要么由三部分组成:一个根、一棵左子树TLT_LTL​、一棵右子树TRT_RTR​。左子树和右子树本身也是二叉树,而且都允许是空的。fill:#333;important;important;fill:none;color:#333;color:#333;important;

2026-10-16 11:20:10 133

原创 数据结构与算法分析c语言描述学习:第 4 章 树:从零开始理解

这一篇是第 4 章的开头部分。它不讲具体细节,而是先告诉你:这一章要解决什么问题、用什么办法、后面会学到哪些东西。我们把每个想法都拆开,配上图和 C 语言小程序,一步一步看明白。你可以这样理解 log⁡2N\log_2 Nlog2​N:一个数连续除以 2,除多少次能变成 1。1024→512→256→⋯→11024 \to 512 \to 256 \to \dots \to 11024→512→256→⋯→1,除了 10 次,所以 log⁡21024=10\log_2 1024 = 10log2​1024=

2026-10-16 11:18:53 127

原创 数据结构与算法分析c语言描述学习:习题 3.23:用一个数组实现三个栈

只给你一个数组,要在里面同时放下三个栈,三个栈都要能正常 push(压入)和 pop(弹出)。难点只有一个:三个栈谁先长、谁后长、谁长得多,事先都不知道。如果分配不好,会出现"某个栈已经没位置了,但数组里明明还有大片空位"的浪费。下面先把方案一、二各用几句话说清楚,再把方案三从头到尾讲透,并给出完整代码。数组大小为 nnn,每段长 m=⌊n/3⌋m = \lfloor n/3 \rfloorm=⌊n/3⌋。下标 0,1,2,3,4,5,…0,1,2,3,4,5,\dots0,1,2,3,4,5,… 轮流分

2026-10-15 16:00:57 240

原创 数据结构与算法分析c语言描述学习:习题 3.19:计算后缀表达式

题目很短:写一个程序,计算后缀表达式的值。这句话里有两个概念需要先弄懂:什么是"后缀表达式",以及为什么要用栈来算它。我们从零开始讲,先把算法讲透,最后才贴代码。后缀有一个很大的好处:不需要括号,也不需要记"先乘除后加减"。运算顺序已经完全由书写顺序决定了。比如:以 (3+4)×2(3+4)\times 2(3+4)×2 为例,它对应这样一棵树:运算符在上面,操作数在下面。同样的树用 Mermaid 画一遍:*+234后序遍历的顺序是:左子树,右子树,根。从根 出发:先走左子树 (它的左边 3,右边

2026-10-15 16:00:04 182

原创 数据结构与算法分析c语言描述学习:习题 3.15:自调整表(Self-Adjusting List)

这份笔记从零讲起:先说清楚题目要做什么、为什么要用栈,再一步一步手动模拟,最后才给出完整代码,并把代码一段一段拆开讲。

2026-10-14 19:57:25 171

原创 数据结构与算法分析c语言描述学习:习题 3.10 约瑟夫问题(Josephus Problem)

NNN 个人围成一圈,编号 1∼N1 \sim N1∼N。从 1 号开始传一个烫手山芋:最容易搞错的地方是 M=0M=0M=0:一次都不传,那开局拿着山芋的 1 号直接出局,所以顺序是 1, 2, 3, 4。题目要求:人是围成圈的,而且经常有人被删掉,所以最自然的选择是循环链表(最后一个结点的 next 指回第一个结点):5 的 next 指回 1,这就是“环”。要删除一个结点,必须知道它的前一个结点(要修改前一个的 next)。单向链表没法往回走,所以我们让指针 永远指向“拿山芋的人的前一个人”。这

2026-10-14 19:55:49 213

原创 数据结构与算法分析c语言描述学习:习题 3.7:用链表做多项式乘法(三种做法 + 复杂度比较)

这道题的意思很直接:给你两个多项式,用链表把它们存起来,写函数算出乘积。要求结果满足两条:一个多项式,比如 x2+2xx^2 + 2xx2+2x,是由几个"项"加起来的。每一项有两个数:我们约定:指数从大到小排。多项式 3x4+x3+4x23x^4 + x^3 + 4x^23x4+x3+4x2 在链表里长这样:再约定两件事:链表操作最烦的是"头节点":删头、插头要单独写一套。有个常用的小技巧:在最前面放一个假节点 ,让它的 指向真正的头。这样所有节点前面都有"前一个节点",代码统一了。最后返回 就是

2026-10-14 13:18:45 204

原创 数据结构与算法分析c语言描述学习:习题 3.1:打印单链表的所有元素

想象一场"寻宝游戏":1.3 整条链表的样子#mermaid-svg-R33C5ZJ6tpaVQzb9{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-R33C5ZJ6tpa

2026-10-14 13:17:19 104

原创 数据结构与算法分析c语言描述学习:3.3.1 栈的模型

栈(Stack) 是一种特殊的线性表。特殊在哪里?一条限制:洗好的盘子一个叠一个:其中 Push 相当于线性表的"插入",Pop 相当于"删除"。本质上,对栈你只能做 Push 和 Pop,其余都是辅助。可以把栈想象成一个只有一个开口的筒:要点:此时 Top 得到 5;Pop 会拿走 5,然后 8 成为新的栈顶。空栈里什么都没有,Pop 或 Top 没有东西可操作。这被认为是使用栈的人违反了规则,称为栈 ADT 的错误。好比盘子堆已经没有盘子了,你还要去"拿一个",这个动作本身就不成立。虽然这一节讲的

2026-10-13 21:33:06 124

原创 数据结构与算法分析c语言描述学习:3.2.4 链表编程中最常见的错误

错误后果对策指针没初始化访问随机地址,崩溃一定先赋值,创建结点后Next置 NULL解引用 NULL立即崩溃每次解引用前检查非 NULL该 malloc 的没 malloc往没有结点的地方写数据要存新数据就必须 malloc不该 malloc 的 malloc浪费内存,丢失原指针只是遍历就别 mallocfree 后继续用读到未定义数据先存下一个结点;free 后置 NULLsizeof写成指针类型内存申请太小,越界用。

2026-10-13 17:56:15 97

原创 数据结构与算法分析c语言描述学习:第 3 章:链表、栈和队列

抽象数据类型(Abstract Data Type,简称 ADT)就是"一组操作"的集合。关键在于"抽象"二字:定义 ADT 时,只说有哪些操作、每个操作做什么,完全不提这些操作怎么实现。它是一种数学上的约定,不是某段具体的代码。你可以把它看成模块化思想的延伸:不仅函数可以是黑盒子,整个数据类型也可以是黑盒子。想想你每天用的int:它有加、减、乘、除这些操作,但你从不关心 CPU 内部怎么算加法,你只知道"343+434得777整数、实数、布尔值是数据类型,各有自己的操作。

2026-10-13 17:53:39 126

原创 数据结构与算法分析c语言描述学习:欧几里得算法与快速幂:两个“每次砍掉一大半“的经典算法

算法做什么每步怎么缩小规模复杂度欧几里得算法求最大公约数MN→NMmodNMN→NMmodN,两轮MMM至少减半Olog⁡NO(\log N)OlogN快速幂求XNX^NXN指数每次减半,底数平方Olog⁡NO(\log N)OlogN欧几里得M = N;N = Rem;三行顺序不能乱,N为 0 时的M就是答案。快速幂:一次递归、指数减半;奇数时最后多乘一个X。递归写成两次,效率就完全变了。

2026-10-12 17:56:52 58

原创 数据结构与算法分析c语言描述学习:手把手数出一个循环的总花费

这篇文章用一个最简单的小程序,带你从零学会"数花费"。先讲清楚道理,再一步步模拟,最后给出可以直接编译运行的 C 代码。我们要算前 NNN 个整数的立方和:13+23+33+⋯+N31^3+2^3+3^3+\cdots+N^313+23+33+⋯+N3做法很朴素:准备一个累加器,从 1 数到 NNN,每数到一个 iii,就把 i×i×ii\times i\times ii×i×i 加进去。举个例子,N=3N=3N=3:代码长这样(行号是为了后面方便说"第几行"):2. 我们要数的是什么不是用秒

2026-10-12 17:54:38 61

原创 数据结构与算法分析c语言描述学习:2.3 要分析什么

影响运行时间的因素编译器 电脑速度理论分析管不了算法本身要分析输入 主要是规模 N要分析所以我们的做法是:固定一台"理想"的机器,只看算法本身和输入规模,研究运行时间怎么随 NNN 变化。同样是 NNN 个数据,输入的内容不同,算法跑的时间也可能不同。所以我们定义两个函数:在数组里依次查找一个数:从第 1 个看起,找到就停;看完都没找到就返回"找不到"。我们统计比较了几次,作为运行时间的衡量。数组 ,N=8N = 8N=8:下标怎么变:循环里 iii 从 000 走到 N−1N-1N−1,每走一步比较

2026-10-12 17:26:48 143

原创 数据结构与算法分析c语言描述学习:第 2 章 算法分析

算法分析估算运行时间把几天缩到零点几秒滥用递归的后果高效算法斐波那契数快速求幂最大公约数用秒表量运行时间有个问题:换一台电脑结果就变了。更靠谱的办法是:数一数程序里"基本操作"(一次加法、一次比较、一次赋值)一共做了多少次,再看这个次数随数据规模 NNN 怎么增长。假设电脑每秒能做 10910^9109 次基本操作,那么操作次数为 TTT 的程序,大约要跑:时间≈T109 秒\text{时间} \approx \frac{T}{10^9} \text{ 秒}时间≈109T​ 秒数据规模一样,只是算法

2026-10-12 17:24:58 153

原创 数据结构与算法分析c语言描述学习:习题 1.10 证明两个求和公式

要证明下面两个公式对任意正整数Ni1∑N​2i−1N2i1∑N​i3i1∑N​i2∑i1N​的意思是"让i从1一直取到N,把后面的式子逐项加起来"。

2026-10-12 12:01:48 73

原创 数据结构与算法分析c语言描述学习:2^100 除以 5 的余数是多少

题目是:2100(mod5)=?2^{100} \pmod 5 = ?2100(mod5)=?意思是:先算出 21002^{100}2100,再除以 555,问余数是多少。先说答案:余数是 111。下面一步步讲清楚为什么,以及怎么让计算机算。这里有一个现实问题:21002^{100}2100 大约是 1.27×10301.27 \times 10^{30}1.27×1030,一个 64 位整数根本装不下,所以不能"先算出来再取余"。需要边算边取余,让数字始终很小。a(modm)a \pmod m

2026-10-12 11:59:37 131

原创 数据结构与算法分析c语言描述学习:无穷求和

先抓住一个关键观察:a、b、c 其实就是 d 在 N=0,1,2N = 0, 1, 2N=0,1,2 时的特例。因为 i0=1i^0 = 1i0=1,i1=ii^1 = ii1=i,所以:S(N)=∑i=0∞iN4i,a=S(0),b=S(1),c=S(2)\text{S}(N) = \sum_{i=0}^{\infty} \frac{i^N}{4^i}, \qquad \text{a} = \text{S}(0),\quad \text{b} = \text{S}(1),\quad \text{c}

2026-10-12 11:56:37 326

原创 数据结构与算法分析c语言描述学习:习题 1.1:选择问题(找第 k 大的数),取 k = N/2

选择问题:给你 NNN 个数,找出其中第 kkk 大的那个数。这道题让我们取 k=N/2k = N/2k=N/2(除法向下取整),也就是找"排在正中间附近"的数,很像求中位数。然后:从大到小排好:这里 N=8N=8N=8,k=N/2=4k=N/2=4k=N/2=4,答案是 6。注意一个下标陷阱:第 kkk 大对应的数组下标是 k−1k-1k−1,因为 C 语言的下标从 0 开始。第 1 大在下标 0,第 4 大在下标 3。最直白的想法:好处是简单,不容易写错。时间主要花在排序上。常见的排序(比如

2026-10-12 09:44:52 50

原创 数据结构与算法分析c语言描述学习:模运算:只关心“余数“的算术

现在是 3 点钟,再过 10 个小时,是几点?3+10=133+10=133+10=13,但钟表上没有 13 点,转了一圈回来,是 1 点。钟表只有 12 个刻度,数到 12 就"绕回去"。这种"绕圈"的算术,就是模运算。13 点和 1 点,在钟表上看起来是同一个位置,我们就说:13 和 1 模 12 同余。抓住一句话:模运算只关心"除以 NNN 之后剩下的余数"。如果 NNN 能整除 A−BA-BA−B,就说 AAA 与 BBB 模 NNN 同余,写成:A≡B(modN)A \equiv B \

2026-10-11 19:38:00 87

原创 数据结构与算法分析c语言描述学习:2. 单词搜索:在方阵里找单词

输入有两样东西:一个二维的字母方阵,以及一份单词表。要求找出这些单词在方阵里的位置。单词可以沿水平、竖直、斜线的任意方向出现(一共 8 个方向)。下面是一个 4×44 \times 44×4 的例子,行号、列号都从 1 开始数:单词表是 、、、。它们的位置是:单词起点(从 1 数)终点(从 1 数)方向程序内部的起点(从 0 数)this(1,1)(1,4)right(0,0)two(1,1)(3,1)down(0,0)fat(4,1)(2,

2026-10-11 19:35:41 237

原创 数据结构与算法分析c语言描述学习:第1章 引言:数据一大,会发生什么

,前面的人再问他前面的……后面的学习中会遇到更好的做法(比如基于"划分"思想的快速选择,或者基于堆的做法),同样的数据只需要大约一秒。同一个问题,有的做法几秒钟出结果,有的做法要等几个小时甚至几天。这只是量级估算:机器越慢、内存访问越不友好,实际用时越长,在较慢的机器上完全可能是几天。的思路完全不同:用两个变量记住"前一个"和"当前这个",像一个窗口一样往右滑,每个数只算一次。从最后一格开始往左找位置,最后一格的旧值被覆盖,就等于被挤出去了。从大到小排序时,"顺序反了"的意思是:前面的数比后面的数。

2026-10-11 14:36:35 293

原创 软件调试学习:9.7.2 与 9.7.3:核函数里的 malloc、free 和 assert

平时我们在 CPU 代码里分配内存用 ,调试时用 检查假设。这两样东西在 GPU 的核函数里也能用,写法和 C 语言几乎一样:逐个部分读:最容易踩的坑有两个:一是忘记检查 ,二是线程很多时总量超出堆大小。比如 100000100000100000 个线程每个申请 128128128 字节,总共需要:100000×128=12800000 字节≈12.2 MB100000 \times 128 = 12800000 \text{ 字节} \approx 12.2 \text{ MB}100000×1

2026-10-11 09:19:06 94

原创 软件调试学习:CUDA 执行配置:核函数调用那三对尖括号

先看这一行代码:它的意思是:让 GPU 运行 这个函数,开 1 个线程块,每个块里有 NNN 个线程,参数是 、、。函数名后面、圆括号前面的 是 CUDA 加的扩展语法,叫做执行配置(Execution Configuration)。它回答的问题是:这个函数要在 GPU 上"跑多少份、怎么分组"。CUDA 的好处是:串行的 CPU 代码和并行的 GPU 代码之间过渡很自然,读代码的人一眼就能看出哪里进了 GPU。完整写法有四个参数:用树画出来:执行配置Dg, Db, Ns, SDg网格里有几个块类

2026-10-11 09:17:50 115

原创 软件调试学习:PTX 指令格式

PTX 是 NVIDIA GPU 的"中间汇编语言"。这一节只讲一件事:一条 PTX 指令长什么样,每个部分是干什么的。一条 PTX 指令由三块组成:谓词(可选)、操作码、操作数(0 到 3 个)。写法如下:方括号表示"可以没有"。结尾的分号不能少。用 Mermaid 画成树,结构一目了然:PTX 指令谓词 (可选)@p 或 @!p操作码如 setp.ge.s32操作数 (0 到 3 个)目标操作数 d可以是 p|q 两个也可以是 (_) 占位源操作数 a, b, c用 ASCII 再画一遍,方便对照:

2026-10-11 09:15:17 233

原创 软件调试学习:9.3 硬件指令集

处理器能听懂的"命令清单",就叫指令集。每一条命令有两种写法:Nvidia 把 GPU 硬件指令对应的汇编语言称为 SASS。SASS 的全称,官方文档里没有给出。有人说它是 Streaming ASSembler(流式汇编器)的缩写,也有人说是 Shader Assembler 的缩写,前一种说法可能更接近。不过全称并不影响使用,记住"SASS = GPU 硬件指令的汇编"就够了。编译再翻译CUDA C 代码程序员写的PTX 指令中间指令 有公开文档SASS 指令硬件指令 文档不公开GPU 硬件执行既然

2026-10-11 07:43:41 209

Real-Time C++, 2nd Edition.pdf

C++ programs combine class types that encapsulate objects with procedural subroutines in order to embody the functionality of the application. This chapter presents these main language elements of C++ using a short, intuitive program that toggles an LED on a microcontroller output port pin. In addition, other language features are introduced including the syntax of C++, namespaces, the C++ standard library and optimization with compile time constants. This chapter uses our target system with the 8-bit microcontroller.

2018-06-17

OpenGL ES 3dot0 Cookbook

First and foremost, I would like to thank my wife, Gurpreet, for her love, encouragement, and extreme patience during the book writing process, which mostly occurred on vacations, weekends, and overnights. I dedicate this book to my parents and brother; without their support, this book wouldn't have been possible. I wish to extend my special thanks to Amit Dubey for his guidance and directions, which always proved helpful. I would like to express my gratitude to Vijay Sharma. I learned ways to handle complex problems with a simple approach from him. I am highly grateful to Saurav Bhattacharya, Mohit Sindwani, and Tarun Nigam for being highly supportive during the course of this book. I am also very thankful to Dr. Ulrich Kabatek for providing me flexible timings, which helped me fnalize this title.

2018-06-17

OpenCV 3 Blueprints.pdf

OpenCV 3 Blueprints.pdf OpenCV 3 Blueprints.pdfOpenCV 3 Blueprints.pdf

2018-06-17

Learning Boost C++ Libraries.pdf

Boost is not just a collection of useful, portable, generic C++ libraries. It is an important incubator for ideas and concepts that make their way to the ISO C++ Standard itself. If you are involved in the development of software written in C++, then learning to use the Boost libraries would save you from reinventing the whee improve the quality of your software, and very likely push up your productivity.

2018-06-17

OpenCV Computer Vision with Python.pdf

OpenCV Computer Vision with Python.pdf OpenCV Computer Vision with Python.pdf

2018-06-17

OpenGL 4 Shading Language Cookbook, Second Edition

OpenGL 4 Shading Language Cookbook, Second Edition

2018-06-17

OpenGL Data Visualization Cookbook

OpenGL is an ideal multiplatform, cross-language, and hardware-accelerated graphics rendering interface that is well suited to visualize large 2D and 3D datasets in many felds. In fact, OpenGL has become the industry standard to create stunning graphics, most notably in gaming applications and numerous professional tools for 3D modeling. As we collect more and more data in felds ranging from biomedical imaging to wearable computing (especially with the evolution of Big Data), a high-performance platform for data visualization is becoming an essential component of many future applications. Indeed, the visualization of massive datasets is becoming an increasingly challenging problem for developers, scientists, and engineers in many felds. Therefore, OpenGL can provide a unifed solution for the creation of impressive, stunning visuals in many real-time applications.

2018-06-17

OpenCV By Example.pdf

OpenCV By Example.pdfOpenCV By Example.pdfOpenCV By Example.pdf

2018-06-17

A Practical Introduction to Computer Vision with OpenCV.pdf

A Practical Introduction to Computer Vision with OpenCV.pdf

2018-06-17

Functional Programming with C++

Functional programming is experiencing a resurgence with languages like Python, Haskell, and Scala. C++ and Java have also added functional features, such as lambdas and futures. Writing C++ in a functional style using const variables, functions without side effects, recursive functions, and function objects results in code that is often simpler and easier to maintain and understand, especially when poorly documented. This book explores functional techniques in C++ code and their advantages and disadvantages.

2018-06-17

Procedural Content Generation for C++ Game Development.pdf

Computer games are a vast medium with dozens of genres that have developed over the past three to four decades. Games are bigger and more immersive than ever, and gamers' expectations have never been higher. While linear games, ones that have a set story and fxed progression, are still commonplace, more and more dynamic and open-ended games are being developed. Advances in computer hardware and video game technologies are giving a much more literal meaning to the phrase "game world". Game maps are constantly increasing in size and flexibility, and it's thanks to technologies such as procedural generation that it's possible. Two gamers who buy the same game may have very different experiences as content is generated on the fly

2018-06-17

OpenGL Programming Guide, 8th Edition

OpenGL Programming Guide, 8th Edition OpenGL Programming Guide, 8th Edition

2018-06-17

Linux Sound Programming.pdf

Linux Sound Programming.pdf Linux Sound Programming.pdf

2018-06-17

Arduino Computer Vision Programming.pdf

Arduino Computer Vision Programming.pdf Arduino Computer Vision Programming.pdf

2018-06-17

OpenCV Computer Vision Application Programming Cookbook Second Edition.pdf

OpenCV Computer Vision Application Programming Cookbook Second Edition.pdf

2018-06-17

pictures.zip

图片picture1

2020-08-20

The Linux Programming Interface

The Linux Programming Interface

2018-06-17

OpenCV 2 Computer Vision Application Programming Cookbook

OpenCV 2 Computer Vision Application Programming Cookbook

2018-06-17

Learning Image Processing with OpenCV.pdf

Learning Image Processing with OpenCV.pdfLearning Image Processing with OpenCV.pdf

2018-06-17

Practical Algorithms for 3D Computer Graphics, Second Edition.pdf

Practical Algorithms for 3D Computer Graphics, Second Edition.pdf

2018-06-17

vscode 主题slab-theme-0.0.3.vsix

vscode 主题 slab-theme-0.0.3.vsix

2026-09-14

svg 资源文件opengl

svg

2025-09-20

游戏学习资源intro-art.zip

游戏学习资源intro_art.zip

2025-04-12

Gaming Keyboard Splitter

Gaming Keyboard Splitter

2024-11-11

Game Programming Using QT.pdf

Game Programming Using QT.pdf Game Programming Using QT.pdf

2018-06-17

Multicore and GPU Programming An Integrated Approach.pdf

Multicore and GPU Programming An Integrated Approach.pdf

2019-03-21

C++ API设计.pdf

C++ API设计.pdf

2019-04-13

ZeroMQ 云时代极速消息通信库.pdf

ZeroMQ 云时代极速消息通信库.pdf

2019-04-20

Effective C++ 第三版(中文带书签PDF).pdf

Effective C++ 第三版(中文带书签PDF).pdf

2019-04-13

Effective C++ 第三版.pdf

Effective C++ 第三版(中文带书签PDF).pdf

2019-04-14

2016-09 C++11_14高级编程 Boost程序库探秘, 3rd.pdf

2016-09 C++11_14高级编程 Boost程序库探秘, 3rd.pdf

2019-04-20

OGLPG-9th-Edition.zip OpenGL编程指南代码(包括资源文件)

OGLPG-9th-Edition.zip OpenGL编程指南(红皮书)包括资源文件OGLPG-9th-Edition.zip OpenGL编程指南(红皮书)包括资源文件OGLPG-9th-Edition.zip OpenGL编程指南(红皮书)包括资源文件OGLPG-9th-Edition.zip OpenGL编程指南(红皮书)包括资源文件OGLPG-9th-Edition.zip OpenGL编程指南(红皮书)包括资源文件OGLPG-9th-Edition.zip OpenGL编程指南(红皮书)包括资源文件

2019-10-23

OpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.core

OpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.coreOpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.coreOpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.coreOpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.coreOpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.coreOpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.coreOpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.coreOpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.coreOpenGL 4.5 Reference Pages API + GLSLangSpec.4.60 + glspec46.core

2019-10-22

C++数据结构与算法 第4版.pdf

C++数据结构与算法 第4版.pdfC++数据结构与算法 第4版.pdf

2019-04-14

Learning Windows 8 Game Development.pdf

Learning Windows 8 Game Development.pdf

2019-04-20

OGRE 3D 1.7 Application Development Cookbook.pdf

OGRE 3D 1.7 Application Development Cookbook.pdf

2019-04-20

网络多人游戏架构与编程.pdf

网络多人游戏架构与编程.pdf网络多人游戏架构与编程.pdf网络多人游戏架构与编程.pdf

2019-04-20

UNIX网络编程卷1:套接字联网API(第3版) (1).pdf

UNIX网络编程卷1:套接字联网API(第3版) (1).pdfUNIX网络编程卷1:套接字联网API(第3版) (1).pdf

2019-04-14

C++黑客编程揭秘与防范 第2版.pdf

C++黑客编程揭秘与防范 第2版.pdf

2019-04-20

More Effective C++中文版

More Effective C++中文版

2019-04-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除