自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(165)
  • 收藏
  • 关注

原创 基于range的函数式编程C++,python比较

Python 和 Kotlin 在表达这种算法时确实更优雅,而 C++ 在性能和类型安全上更有优势。选择哪种语言取决于你的具体需求!Kotlin 和 Python 的函数式编程确实可以更简洁地实现这个逻辑。特性 Python Kotlin C++20 Ranges。为什么 Python/Kotlin 更简洁?函数式支持 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐。类型安全 ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐。简洁性 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐。可读性 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐。性能 ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐。

2025-12-22 17:29:48 336

原创 C++20 Ranges与函数式编程举例

我们可以用 transform 来计算水仙花数的各位数字幂次和。虽然使用transform和字符串转换的方法很优雅,但性能可能不如直接使用整数运算。水仙花数的常见值:153, 370, 371, 407, 1634, 8208, 9474, 54748, …我来详细介绍C++20 Ranges中的这些操作,并给出水仙花数的示例。这样改写后,水仙花数的判断逻辑完全融入了Ranges的函数式编程风格!· 学习/演示:展示Ranges的各种用法。· 性能优先:使用传统的整数运算方法。更简化的版本(C++23)

2025-12-22 17:21:50 344

原创 传值还是传引用?c++,python对比

操作PythonJavaC++传参(基本/不可变)引用(表现如值)值(primitive) / 引用副本(对象)值(拷贝)传参(容器/可变)引用(共享对象)引用副本(可修改内容)值(拷贝整个容器,除非用返回值返回对象引用primitive:值;对象:引用返回值(通常移动或 RVO 优化)赋值 a = ba 绑定到 b 所指对象primitive:值拷贝;对象:引用拷贝深拷贝(调用 operator=)push 到容器存储对象引用存储对象引用拷贝或移动元素(值语义)

2025-12-18 16:28:22 889

原创 函数指针数组

希望这个解释能让你完全理解 int (*var[5])(void);如果你对函数指针数组的具体应用场景(比如如何用它实现一个简单的计算器或游戏状态机)感兴趣,我可以进一步举例说明。在 C++ 中,int (*var[5])(void);元素类型 int (*)(void),即“指向返回 int 且无参函数的指针”。你可以把 int (*[5])(void) 想象成这种函数指针的“数组类型”。var 的本质 它是一个数组,其元素是函数指针。数组大小 固定为 5。

2025-12-17 08:02:48 372

原创 实现一个完整的C++ TimSort算法

基于搜索结果,我来为你实现一个完整的C++ TimSort算法,支持任意可比较类型。这个实现参考了Python和Java中的TimSort算法设计。这个实现参考了Python和Java中的TimSort算法,在保持算法核心思想的同时,提供了简洁的C++接口。我来为你实现一个完整的C++ TimSort算法,支持任意可比较类型的排序。

2025-12-16 18:10:45 269

原创 Informed RRT*算法,并包含圆形障碍物环境

我将为你实现一个基于Matplotlib可视化的Informed RRT*算法,并包含圆形障碍物环境。这个实现包含了Informed RRT*的所有关键特性,并提供了丰富的可视化功能。这个矩阵变换方法不仅代码更简洁,而且数学上更优雅,更容易理解和维护。变换矩阵的方法也更符合计算机图形学和机器人学中的标准实践。· 调整step_size:较小的步长(10-15)适合复杂环境,较大的步长(20-30)适合开阔环境。· 修改neighbor_radius:通常设置为step_size的1.5-2倍。

2025-12-16 17:01:54 459

原创 informedRRT*路径规划算法流程解析(伪代码)

这个流程图清晰地展示了Informed RRT*算法的核心改进:在找到初始路径后,将采样限制在能够改进当前解的超椭球区域内,从而大幅提高收敛速度。INFORMED RRT* 算法伪代码流程图。· 虚线框:可选或条件执行块。· 矩形框:处理/计算步骤。· 菱形框:判断/决策点。· 圆角矩形:开始/结束。(2) 路径生成流程。

2025-12-16 12:06:20 346

原创 Informed RRT*实现椭圆启发式采样

这个Informed RRT实现能够在找到第一条路径后显著加速优化过程,通过椭圆采样将搜索集中在有希望找到更好路径的区域,从而比标准RRT更快收敛到最优路径。· generateRandomPoint(): 在找到路径后,90%的概率使用椭圆采样,10%的概率使用原始采样。· generateEllipseRandomPoint(): 在连接起点和终点的椭圆内生成随机点。· updateBestPath(): 当找到新的更好路径时更新状态。· 这确保了在找到路径后,搜索集中在有希望找到更好路径的区域。

2025-12-15 20:16:33 313

原创 STL deque 的详细特征

front()/back() O(1) 访问首尾。pop_front() 指向被删元素的迭代器失效。push_front() O(1) 平均分摊。push_back() O(1) 平均分摊。pop_front() O(1) 平均分摊。后端插入 O(1) 分摊O(1) O(1)pop_back() O(1) 平均分摊。operator[] O(1) 随机访问。随机访问 O(1) O(1) O(n)前端插入 O(1) O(n) O(1)中间插入 O(n) O(n) O(1)

2025-12-15 19:30:09 422

原创 C++的STL中的multimap与map比较

考虑替代方案:有时 map<Key, vector> 可能比multimap更方便,特别是需要随机访问特定键的所有值时。删除 erase(key) 删除一个元素 erase(key) 删除所有匹配键的元素。插入 insert() 或 operator[] 只能使用 insert()· 使用map:当需要键值对且键是唯一的,或者需要通过键快速查找/修改值。计数 count() 返回0或1 count() 返回键出现的次数。场景2:使用map模拟multimap功能。操作 map multimap。

2025-12-15 19:20:31 195

原创 归并排序算法实现,kotlin,c++,python

好的,我们来详细、系统地解释归并算法(Merge Algorithm)及其核心逻辑。归并算法(Merge Algorithm)是将两个或两个以上已经有序的序列合并成一个新的有序序列的过程。它是归并排序(Merge Sort)算法的核心组成部分。一个关键点:归并算法本身不负责排序,它负责合并。它假设输入的子序列已经是排好序的,然后高效地将它们合并。我们用一个具体的例子来说明。目标:合并成一个有序数组 C。· 时间复杂度:O(n + m),其中n和m是两个输入序列的长度。因为每个元素只需比较和复制一次。

2025-12-15 16:20:05 934

原创 排序算法之快排与TIMSORT的比较测试,python

需要我帮你分析测试结果的预期趋势,或针对某个语言的实现进行性能优化(如减少拷贝、使用原地排序)吗?一、Python 性能测试代码。三、C++ 性能测试代码。二、Go 性能测试代码。

2025-12-15 15:57:09 331

原创 C++的MAP与红黑树

std::map(红黑树)和std::unordered_map(哈希表)是C++中互补的两种重要数据结构。你之前实现的红黑树展现了map底层的有序世界,而unordered_map则代表了基于哈希函数的快速无序查找。如果你对哈希表的具体实现细节(比如如何设计哈希函数、如何处理冲突的链表结构)或者红黑树与哈希表在更复杂场景下的性能对比感兴趣,我可以为你提供更深入的解释。因此,你之前实现的红黑树更接近 std::map 的底层原理,而 unordered_map 则使用了不同的技术路线。

2025-12-15 15:29:12 346

原创 二叉树,红黑树初学

类型定义是否自平衡普通二叉搜索树(BST)满足左子 < 根 < 右子的二叉树❌ 否AVL 树自平衡 BST,任意节点左右子树高度差 ≤ 1✅ 是红黑树(Red-Black Tree)自平衡 BST,通过颜色标记和5条性质维持近似平衡✅ 是若查找为主→ 选AVL 树若插入/删除频繁→ 选红黑树若数据量小或随机性强 →普通 BST足够且简单两者都是 O(log n) 的高效结构,红黑树牺牲少量平衡性换取更低的维护成本,因此在工程实践中更常用。

2025-12-15 15:22:40 823

原创 插入排序算法实现(二分查找搜索版本)

这个二分插入排序相比普通插入排序的主要优点是减少了比较次数,特别是当数组较大时,这个优势会更明显。· 对未排序部分的每个元素,使用二分查找在已排序部分找到插入位置。· 最坏情况:O(n²) - 但移动元素的次数与普通插入排序相同。· 使用二分查找减少比较次数(从O(n)降到O(log n))· 平均情况:O(n²) - 但比较次数比普通插入排序少。· O(1) - 原地排序,只需要常数级别的额外空间。· 最好情况:O(n) - 数组已经有序时。· 但元素移动的次数没有减少。· 然后移动元素并插入。

2025-12-15 14:28:42 206

原创 各种排序算法时间复杂度分析和实现和优势

基数排序 O(d·(n + k)) O(d·(n + k)) O(d·(n + k)) O(n + k) ✓ d是最大位数。希尔排序 O(n log n) - O(n²) O(n log n) O(n²) O(1) ✗ 改进的插入排序。归并排序 O(n log n) O(n log n) O(n log n) O(n) ✓ 稳定,适合外排序。快速排序 O(n log n) O(n log n) O(n²) O(log n) ✗ 分治,实际最快。算法 平均情况 最好情况 最坏情况 空间复杂度 稳定性 说明。

2025-12-15 09:30:09 649

原创 快速排序(分治思想)算法

这种分治策略在数据量较大时特别有效,因为它减少了递归调用的开销,同时利用插入排序在小数据集上的优势。· 插入排序:对小数组使用插入排序(时间复杂度 O(n²)但在小规模数据上更快)· 最坏情况:O(n²)(但通过三数取中法大大降低了概率)· 三数取中法:选择更好的枢纽元素,避免最坏情况。· 尾递归优化:较小的子数组先处理,减少递归深度。· 空间复杂度:O(log n)(递归栈深度)· 迭代版本:使用栈代替递归,避免栈溢出。· 平均时间复杂度:O(n log n)· 递归版本:代码简洁,但可能栈溢出。

2025-12-15 09:23:53 447

原创 KDTREE based RRT*类型注释版本

这些类型标注使代码更加清晰,有助于静态类型检查工具(如 mypy)进行错误检查,也提高了代码的可读性和可维护性。

2025-12-14 20:18:12 308

原创 KD-Tree的查询原理

KD-Tree(k-dimensional tree)是一种用于多维空间的数据结构,特别适合范围搜索和最近邻搜索。这使得KD-Tree成为高维空间最近邻搜索的最高效数据结构之一,特别适合RRT*这类需要频繁进行最近邻查询的算法!好的,让我详细解释KD-Tree的查询原理,以及为什么它能将时间复杂度从O(n)降到O(log n)。对于n个随机分布的点,KD-Tree最近邻搜索的期望时间复杂度为O(log n)。注意:当n较小时,KD-Tree的构建开销可能超过搜索收益,但n越大优势越明显!

2025-12-14 19:58:21 463

原创 基于KD-Tree的RRT*路径规划算法

实现一个使用KD-Tree的RRT*路径规划算法,并提供一个REWIRE函数(重连接优化函数)。使用Scipy的KD-Tree进行高效的最近邻搜索替代了传统的线性搜索,大幅提高搜索效率。这个实现可以轻松集成到机器人导航、自动驾驶等系统中,通过调整step_size、neighbor_radius等参数可以平衡规划速度和质量。

2025-12-14 19:50:56 340

原创 C++ 类的继承、设计与装饰器模式 - 游戏角色示例

装饰器基类 CharacterDecorator: 继承自 GameCharacter,包含指向被装饰对象的指针。这个示例完整展示了C++中类继承、设计和装饰器模式的实际应用,通过游戏角色系统使概念更加直观易懂。· 派生类 Warrior 和 Mage: 继承基类并添加职业特有属性和方法。· 基类 GameCharacter: 定义了所有游戏角色的通用属性和方法。我将通过一个游戏角色系统来演示C++中的类继承、类设计和装饰器模式。C++ 类继承、设计与装饰器模式 - 游戏角色示例。

2025-12-14 08:53:21 581

原创 RRT*路径规划算法核心REWIRE函数实现(C++)

节点 (4.0, 5.0) | 父节点 (3.0, 4.0) | 成本:6.40 // 原成本≈7.07,优化后降低。需要我帮你扩展 递归rewire实现、3D空间适配,或补充 Qt可视化界面(用QChart展示路径收敛过程)吗?节点 (2.0, 3.0) | 父节点 (0.0, 0.0) | 成本:3.61 // 原成本更低,不重连。节点 (3.0, 4.0) | 父节点 (0.0, 0.0) | 成本:5.00。C++ RRT* 核心 rewire 函数实现(面向路径规划,可直接集成)

2025-12-13 16:30:08 513

原创 河马优化算法,一种新型启发式群智能算法

在河流或池塘中的位置更新(探索阶段):模拟了河马群的社会结构,包括占统治地位的雄性河马、雌性河马和未成熟河马的行为。· MHO算法:发表于2025年2月。· IHO算法(无线传感网络应用):针对HO全局搜索能力不足、收敛慢的问题,采用混沌映射初始化并引入自适应权重来更新种群位置,用于优化无线传感器网络的分簇路由协议,以均衡网络能耗。主要特点:根据其2024年发表在 Scientific Reports 上的原始论文,HO算法在161个基准函数测试中,有115个表现排名第一,显示出良好的探索与开发平衡能力。

2025-12-13 11:55:52 547

原创 海量数据中找出最大的前100个(find_topk)最小堆算法

我来帮你实现这个寻找前100个最大数据的算法。这个算法的时间复杂度是O(n log 100),空间复杂度是O(100)。C++实现Python实现6d==sorted==sorted算法复杂度分析关键点说明。

2025-12-12 17:00:27 304

原创 判断水仙花数并输出,c++

两个版本的功能相同,都能正确找到153、370、371、407这4个3位水仙花数。第一个版本更接近原Lua代码的逻辑,使用字符串处理;第二个版本使用纯数学运算,在某些情况下性能更好。

2025-12-12 16:36:11 308

原创 字符串处理小写字母转换大写字母

字符串类型 不可变 Unicode std::string(可变) String(可变),&str(不可变切片)函数返回 元组 (str, int) pair<string, int> 元组 (String, usize)” 中有 8 个小写字母(e,l,l,o,o,r,l,d)空安全 运行时检查 无(可能空指针) 编译时保证(Option类型)内存管理 自动垃圾回收 手动/RAII 所有权系统。特性 Python C++ Rust。· 原本的大写字母 H、W 保持不变。· 数字和标点符号保持不变。

2025-12-12 12:45:39 295

原创 AI建议的C++基础入门顺序

这个目录遵循 “先基础语法 → 再核心特性 → 后标准库与现代特性” 的路径,适合4-6个月的系统学习。· 基本数据类型(int, float, double, char, bool)· 存储类别(auto, static, register, extern)· 访问控制(public, private, protected)· 文件流(ifstream, ofstream, fstream)· 条件语句(if, else if, switch)· 循环(for, while, do-while)

2025-12-12 12:35:02 482

原创 Rust的移动语义

在 Rust 中,默认是移动语义,而不是传统的值传递或引用传递。这是 Rust 最重要的特性之一,理解所有权系统很关键。移动所有权 func(s: String) 转移 不需要 函数需要拥有数据的所有权。可变借用 func(s: &mut String) 不转移 不需要 需要修改数据。克隆 func(s.clone()) 创建新所有权 需要 需要副本同时保留原数据。不可变借用 func(s: &String) 不转移 通常不需要 只读访问。传递方式 语法 所有权 是否需要 clone 适用场景。

2025-12-11 19:35:05 354

原创 RUST是移动语义与copy trait

整数 i8, u8, i16, u16, i32, u32, i64, u64, i128, u128, isize, usize 所有整数类型。在 Rust 中,实现了 Copy trait 的类型会被自动复制而不是移动。N] 当 T 实现 Copy 且 N 是编译时常量时。) 当所有元素都实现 Copy 时。指针 *const T, *mut T 原始指针(不安全)浮点数 f32, f64 所有浮点数类型。字符 char Unicode 标量值。布尔 bool 布尔值。空类型 () 单元类型。

2025-12-11 19:32:49 511

原创 C++的map.values获取map所有value实现

对于这个问题,建议使用 std::unordered_map(哈希表)而不是 std::map(红黑树),因为前者平均时间复杂度 O(1),更接近 Kotlin 的 HashMap 行为。在 C++ 的 STL 中,std::map 没有直接的 values() 方法来获取所有值,但可以通过迭代器或 range-based for 循环来提取所有值。或 m.insert({key, value})访问 map[key] (可为 null) m[key] (自动创建) 或 m.at(key) (异常)

2025-12-11 17:51:36 402

原创 C++两个数组连接类似python的list相加

您的整理已经非常完善,这些补充内容可以作为进一步的参考。C++与Python在容器操作上的差异确实体现了两种语言不同的设计哲学:Python偏向简洁直观,而C++更注重性能控制和灵活性。预分配reserve O(n+m) O(n+m) 大数据量,性能敏感。运算符重载 O(n+m) O(n+m) 希望语法类似Python。std::copy O(n+m) O(n+m) 函数式编程风格。移动语义 O(n+m) O(1)移动成本 确定不再使用原向量。基础insert O(n+m) O(n+m) 通用场景。

2025-12-11 16:26:42 322

原创 数组间距离计算(包含元素的最大距离)

这样就用 C++ 完整实现了原 Python 代码的功能。

2025-12-11 11:19:15 162

原创 python的列表推导式,reduce,filter

何时用 reduce:当你需要将序列中的所有元素通过某种规则合并,最终得到一个单一的汇总结果(如求和、求积、找最值、连接等)时,使用 reduce。· 何时用 filter:当你的核心任务是根据条件从序列中筛选元素,并且筛选条件比较复杂(可能是一个预定义好的函数)时,filter 很合适。· 何时用列表表达式:当你需要将一个序列转换为另一个新序列,并且转换逻辑清晰,可能还包含简单的过滤条件时,列表表达式是最直观、高效的选择。输出 一个新列表 一个过滤器对象(可转换为列表) 一个单一的累积结果。

2025-12-11 08:33:08 570

原创 DWA路径规划算法python实现(AI)

你觉得这个实现怎么样?要不要一起讨论下怎么进一步优化?比如加入路径平滑或者动态障碍物预测?) 让我想想,DWA算法结合自适应参数调整确实是个很实用的方向呢。你这是在搞机器人导航呀~我超喜欢这类话题!

2025-12-10 19:11:27 282

原创 QT向量实现GJK碰撞检测算法几何图形二维版本

上述代码可以处理3D几何图形的碰撞检测,但不能直接用于2D平面图形。这样你就可以根据需要使用2D或3D版本了。

2025-12-10 05:01:25 230

原创 QT向量类实现GJK碰撞检测算法3d版本

注意:这个实现包含了基本的GJK碰撞检测。对于完整的距离计算和最近点信息,需要实现EPA(扩展多边形算法)。用QT实现GJK算法(吉尔伯特-约翰逊-基尔蒂距离算法)。这里使用QVector3D作为向量类。

2025-12-10 04:58:55 207

原创 vtk切割几何体,然后连通分析

这个程序会将模型用平面切割成两部分,然后分析每个部分的连通性,最终输出分割后的所有连通部分。这个程序可以处理复杂的模型,即使切割后产生多个独立部分也能正确识别和分离。每个连通部分都会用不同颜色显示,并保存为单独的STL文件。自动连通性检测:使用vtkConnectivityFilter检测每个部分的连通区域。· 多部分输出:原始的两部分可能变成多个连通部分。· 文件保存:保存每个连通部分为单独的STL文件。· 连通性分析:自动分析每个切割部分的连通性。· 平面切割:使用用户定义的平面切割模型。

2025-12-09 16:15:14 173

原创 Theta*算法,进化版本任意角度A*路径规划算法

实现"S#"路径规划算法,但需要澄清的是:在路径规划领域,并没有广泛公认的"S#"算法。这个实现提供了多种"S"相关的路径规划算法,特别强调了安全性和路径质量。我将为您实现几种可能的"S"相关路径规划算法,并提供一个综合的路径规划框架。您可以根据具体需求选择合适的算法,或组合使用这些算法以获得最佳效果。算法:结合安全系数的改进A。算法 - 一种改进的A。

2025-12-08 09:09:42 1071

原创 D*算法初学,python D*路径规划算法实现

D* Lite 是 D* 的。

2025-12-08 09:06:43 2056

原创 C++容器STL的队列queue,优先队列 priorityque的初始化方式

std::queue 不支持迭代器 (iterator) 或随机访问。你无法像遍历 std::vector 那样遍历一个队列,只能严格按照“先进先出”的规则,通过反复调用 front() 和 pop() 来访问和移除元素。std::queue 是一个容器适配器,这意味着它是在其他底层容器(如 std::deque 或 std::list)之上实现的。如果你需要处理特定类型的数据(比如自定义结构体)或者需要了解如何用 std::list 作为 std::queue 的底层容器,我也可以为你提供更详细的说明。

2025-12-08 07:59:33 460

C++之STL的vector详解,包括初始化和各种函数:vector的初始化、数据的增删查改等

vector的详解那篇 一、vector的初始化 1、默认构造函数 2、拷贝构造函数copy区间 3、指定数量和元素值的构造函数 4、指定数量的构造函数 5、拷贝构造函数 二、vector的初始化-赋值 1、.assign(beg, end) 赋值操作 2、.assign(n, elem) 赋值操作 3、重载等号操作符 operator= 4、直接列表初始化 `Vector<T> {,};` 5、swap 函数 三、数据的增删查改 1、at(int id)接口 2、front()接口 3、back()接口 4、[id]直接取 5、插入函数 6、尾部添加 push_back(ele) 7、尾部删去 pop_back() 8、删区间 9、删指定位置 10、清空 四、其他接口 1、size()成员函数 2、empty() 3、resize(int num) 4、capacity() 5、reserve(int len) 总结

2024-03-29

空空如也

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

TA关注的人

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