- 博客(438)
- 资源 (3)
- 收藏
- 关注
原创 c++ 在递归运算时可能会比 java 慢
在用 c++ 编写动态规划时,使用了递归函数以及 unsorted_map 存储数据,发现有时候竟然比 java 的 ConcurrentSkipListMap 计算速度慢,尤其是在 hash 为几个浮点型数据的组合时。内存管理:unordered_map 在递归中频繁 rehash 触发内存重分配,远超 ConcurrentSkipListMap 跳跃表的动态调整开销。并发缺失:若递归涉及多线程,unordered_map 需加锁,而 ConcurrentSkipListMap 无锁设计更高效。
2025-03-26 05:24:54
281
原创 c++ 中的 transform,range::transform
在 C++ 中,std::transform 定义在 头文件中。它用于对范围内的元素进行转换,并将转换结果存储到目标范围中,类似于 java 或 python 中的 map。
2025-03-23 04:24:03
434
原创 c++ 数组索引越界检查
用 c++ 编写了一些程序,发现 c++ 不会自动检查数组的索引越界问题。有时候程序运行错误,提示的错误信息莫名其妙,但很可能是某个数组越界的问题。在 C++ 中,数组不会进行边界检查,如果 arr[10] 访问了未分配的内存,就可能会得到 随机的、异常大的值,甚至可能导致程序崩溃。网上查看的一些检查数组越界的方法似乎不太好用,感觉调试时只能慢慢用 try catch 语句发现到底是哪个数组越界了。
2025-03-21 20:11:31
216
原创 c++ 中的可变参数模板与折叠表达式
c++ 11 引入了可变参数模板,c++ 17 引入了折叠表达式,比 c 语言的可变参数更加简洁灵活。这篇博客总结了一些例子。
2025-03-17 23:14:54
248
原创 c 语言与 c++ 中的 struct 结构体
c++ 与 c 语言的成员都是 public 的。c++ 中的 struct 与 class 基本完全相同,唯一区别在于类可以有私有成员。在 C 和 C++ 中都可以使用 struct 定义结构体。
2025-03-12 05:18:26
171
原创 c++ 中的 friend 关键字
在 C++ 中,friend 关键字用于声明友元,它允许一个类或函数访问另一个类的私有(private)和受保护(protected)成员。友元机制打破了类的封装性,但提供了更高的灵活性,适用于特定场景。Python 和 Java 中似乎没有见到类似的关键字。友元函数一个重要的应用是重载运算符。
2025-03-09 02:17:19
218
原创 c++ 调用 gurobi 库及一些使用体会,cmake,mac
python 中直接 import 第三方库,java 加载第三方库的 jar 之后也能直接使用。阶段:编译(compilation)和链接(linking),调用第三方库时,仅仅通过 #include 包含头文件是不够的,必须在链接阶段提供库文件(.a、.dylib 等),以便将代码与库的实现连接起来。Mac 上用 c++ 还有更麻烦些,不能用 VS studio,只能用 CMake 了。但是 CMake 在 mac 上很多时候不能通过 findpackage 找到库的地址,只能指定添加库的地址。
2025-03-07 22:52:30
475
原创 什么是线程安全?并行计算与调试
当一个库声称自己“不是线程安全的”(not thread-safe),意思是它在多线程环境下使用时,可能会出现数据竞争(data race)、未定义行为(undefined behavior)或不一致的结果。线程安全(thread-safety)是指一个库或数据结构在多个线程同时访问时,能够保证正确性和一致性,而无需用户额外添加同步机制(如锁)。,意味着不容易对他们使用并行计算(每个线程都要独立创建环境和模型)。求解器 gurobi 与 cplex 都不是线程安全的。
2025-03-04 22:07:49
386
原创 java 与 c++在遍历 map 数据结构上的一些差异
std::map:基于红黑树,插入不会使迭代器失效,因此可以一边遍历一边添加。:基于哈希表,只要不触发 rehash,也可以一边遍历一边添加。与 Java 的区别:C++ 的迭代器设计更宽松,没有快速失败机制,开发者需自己保证正确性。Java 的 HashMap 在容量不足时也会触发类似rehash的扩容(resize),但它的快速失败机制会在遍历时检测到修改并抛出异常。C++ 的 unordered_map 没有这种保护机制,rehash后迭代器失效是程序员的责任。
2025-03-03 18:25:08
708
原创 动态规划多阶段报童模型,c++ 实现, java 实现
借助 chaptgpt 和 deepseek,成功实现了c++上的多阶段报童模型的动态规划。花费了几天,将以前的 java 程序用 c++ 实现。
2025-03-02 21:46:27
616
原创 C++ `struct`、`class` 和 `namespace` 的异同
在 C++ 中,structclass和namespace经常看到,都是,但它们的作用、访问权限和适用场景各不相同。借助 AI 总结了这篇博客。Java 与 Python 中,没有看到 struct 与 namespace 的类似类型。
2025-03-02 00:15:47
914
原创 c++ 画数学函数图
没有保存图片的功能,但可以直接用电脑截图保存,也可以用 QPainter 里面一些保存图片的函数。c++ 画数学函数图并不像 python 方便。
2025-03-01 20:40:35
324
原创 c++ 中的容器 vector 与数组 array
当初自学 c++ 与 c 语言时,一直被指针弄的云里雾里。后来 c++ 中引入了容器,避免了指针。但是,一些教材把容器的章节放在书本中后面的章节,太不合理。应该把这种方便的功能放到前面,这样一些初学者就不会遇到太多生硬难懂的知识点从而对这个语言望而却步了。让 AI 总结了相关知识点,方便自己以后查阅。
2025-02-28 23:45:49
825
原创 C++ 17 允许在 for 循环,if 语句,switch 语句中初始化变量
看到 c++ 有这个特性,python 和 java 似乎都没有,根据 AI 的回答进行了一些整理总结。在 C++ 中,允许在for循环和if语句、switch语句中初始化变量,这是引入的一项重要特性,称为。这不仅提高了代码的可读性,还能减少变量的作用域,避免不必要的变量污染。for在for语句的第一部分,我们通常用它来int i = 0;foriijforforifC++17 允许在if语句中初始化变量,使变量的作用域if及其else块,避免污染外部作用域。
2025-02-28 22:08:15
654
原创 C/C++ 指针详解
想起之前自学 c 语言时花了累计一年看谭浩强的教材,花了一年多看一本 C++ 800多页的大厚书,最终也没有学明白,尤其是指针云里雾里的。感觉借助生成式 AI ,要不了多久,我应该也可以像上手 Java 那样上手 C++ 的大型程序了。指针在 C 和 C++ 中非常重要,理解指针有助于掌握底层内存管理和数据操作!这个指针套指针,我混淆了很多年了。这篇博客基于两个 AI 的回答,整理了指针的相关知识点。,它指向这个变量在内存中的位置。的指针,即数组第一个元素的地址。并且,当 p 为有效指针时,
2025-02-27 03:12:44
570
原创 Gurobi 并行计算的一些问题
最近尝试用 gurobi 进行并行计算,即同时用多个 cpu 核计算 gurobi 的 model,但是发现了不少问题。目前看到的一些 gurobi 或 cplex 正确运行并行计算的例子,基本都是在目标函数中重新新建模型,或者将原模型的一些参数文件传递到目标函数中,仍然新建模型。真要实现规划模型的并行计算,估计要深入修改求解器模型的源代码。官方没有意愿将模型对象支持 pickle,估计是因为可能会损失模型的其他功能吧。对于求解器的并行计算,目前来看,没有看出相比串行计算有太大优势。
2025-02-26 21:00:34
492
原创 详解 c++ 中的 namespage
C++ 中的命名空间很特别,其他编程语言基本都没有。命名空间介于函数与类之间,兼顾了二者的一些优点。这篇博客根据 chatgpt 的回答整理。
2025-02-26 18:06:28
745
原创 对于动态规划,java, C++, Python 到底谁的运行速度快
经过实际上手测试,综合看来,还是 c++最快,尤其是在普通的循环与计算上,比 java 还快不少但是,若对于更复杂的数据结构,c++ 与 java 相比优势没那么大了,而且 c++ 还要注意开启优化或者对数据结构进行调整优化python 一些库,由于底层基于 c 语言运行,速度可以达到非常快但是,经过一天的探索,发现 c++ 真是比较繁琐的编程语言,很多类、函数或特殊变量的注释都不像 java 或 python 那么清晰易懂,而且程序、库的调用以及运行,要麻烦非常多。
2025-02-23 19:43:53
957
原创 mac 下 java 调用 gurobi 不能加载 jar
在 mac 电脑中的 java 始终不能加载 gurobi 的 jar 包,java 的开发软件 eclipse,idea 总是显示找不到 gurobi 的 jar 包,但是 jar 包明明就在那里。gurobi 对 python 支持的最好,对于 java,而且还是 mac 的支持,就没有那么丰富与及时了。
2025-02-23 18:07:41
387
原创 [Python 数据科学] Python 的良好编程规范与 logging 的使用
字段说明时间日志级别日志内容记录日志的文件%(lineno)d行号logging。
2025-02-14 21:01:51
953
1
原创 [Python 数据科学] Python 导入其他 py 文件, import other module
例如,在 Pycharm 中,对于目录结构2,可以直接按下面代码导入模块,而不用通过 sys.path 添加父文件夹路径。Python 编程中,每个以 .py 为后缀的文件被称作模块(module)。很多时候,我们需要导入其他模块中的函数,在 Python 中导入其他文件夹中的模块时,有几个规则和方法可供使用。,其中,“other_folder” 为文件夹在电脑硬盘中的详细地址。若具体想导入 my_module.py 模块中的某个函数或类 foo(),可以。添加导入模块的具体路径。
2025-02-14 01:25:57
503
原创 花了一个月,精读了四千多行代码
我花了将近一个月的时间,基本弄懂了大部分源代码,也基本搞清楚了这个随机规划算法的大体思路,我还在源代码中添加了许多注释。但是,但这个源代码中并行计算的部分总是运行错误。总体上,这个源代码体现了开发者对 python 以及 gurobi 的应用相当娴熟与专业,不愧是美国 top 名校的博士。我查了查,作者博士毕业后去了工业界,稍微有点可惜。前段时间无意中从网上找到一个随机规划方法的源代码,这个方法我一直在学,自己也编程实现了。但是看到别人更专业的代码后,发现差距还是不小的。
2025-02-13 21:23:31
112
原创 旅行商问题,车辆路径问题的数学规划模型
根据书籍 Snyder, Lawrence V., and Zuo-Jun Max Shen. Fundamentals of supply chain theory. John Wiley & Sons, 2019 中的相关章节整理。
2024-12-15 02:09:08
1185
原创 [Python 数据科学] Python 中的三重引号
Python 中的三重引号,我之前以为只有长注释的作用,仔细查了下,原来还有给函数、类添加说明的作用。这个功能太好了,大大增加了代码的可读性。具体的作用,总计如下。其实三重引号的最直接作用是用来定义跨行字符串,例如:显示的为:2. 给代码添加文档说明 (docstring)如果三重引号没有赋值给一个变量,则它的作用是给 python 的代码文件、类或方法添加说明。例如,下面这么函数:在一些 python 编译器中,例如 spyder,当鼠标停留在函数名时,会自动显示该函数的说明。如下图所示:
2024-11-23 02:57:22
424
原创 不知道吴祖增老先生是否还健在
大约在 2017 年因为 优快云 博客的缘故知道吴祖增老先生,当年老先生已经 84 岁了,仍然在更新 优快云 的博客。这种终身学习的精神令人佩服与感动。7 年过去了,不知道老先生是否还健在?若健在,现在至少 91 岁了。老先生的博客不知何故,已经好几年不能访问了。
2024-11-19 05:04:09
249
原创 渐进最优 (asymptotically optimal)
渐进最优 (asymptotically optimal) 这个名词看到很多次了,在这篇博客总结一下这个概念。一个算法的复杂度,在输入值无限大时,与已知的最优算法的复杂度相比(相除),为一个常数,则该算法为渐进最优算法。的极限存在(若存在,极限值为1),则该算法为渐进最优算法。为输入值的大小,当前算法的运行时间为。,而堆排序与归并排序的算法复杂度都是。例如,最优的排序算法的复杂度为。若最优算法的运行时间下界为。,因此这两个算法为渐进最优。
2024-11-13 18:58:29
449
原创 几乎必然收敛 (almost surely convergence)
在随机规划的书籍或论文中,时常能见到 almost surely convergence (几乎必然收敛)这个名词。在这篇博客里,我总结整理一下这个名词的相关知识点。这篇博文基于维基百科的条目以及国外一本概率教材的。
2024-11-04 20:05:19
1313
原创 一年一度 1024
前段时间与一个博士同学聊天,谈了谈为什么现在越来越多的博士生能发 UTD,而我们当时博士班四年内还有一半同学没发 sci 呢,难道因为现在的博士生的学术功底越来越好了?因此,我不认为一些早早发 utd 的人学术功底确实强不少,目前更多看到的是人脉资源确实比一般人多,不用自己去走一些弯路。毕竟同样一直在努力,多努力几年的人没理由比其他人功底差。有时候,与自己的过去比起来,感觉还是有点进步的。记得,刚读博时,一篇 EJOR 的论文可能好几个月都看不明白,现在不少 EJOR 的论文我一两天就看完了。
2024-10-24 19:57:33
258
原创 定义域, 支撑集, 笛卡尔积, domain, support, Cartisan product
函数的定义域比较熟悉,就是函数有定义的一个输入值集合。上图中的XXX就是函数fff的定义域。
2024-10-14 18:55:17
613
原创 两个向量所在平面的法线,外积,叉积,行列式
偶尔在一个数学题里面看到求两向量所在平面的法线,常规方法可以通过法线与两向量垂直这一特点,列两个方程求解;另外一种方法可以通过求解两个向量的叉积,用矩阵行列式 (determinant) 的方式,之前还没见过,在这篇博客里记录下。为两向量的夹角,法线的长度为这两个向量形成的平行四边形的面积。这跟叉积,点积以及行列式,余子式的几何意义有关。, 可以得到公式 (1),因此可以使用行列式来计算叉积!具体在求解上,求解矩阵行列式非常方便,假如为三维向量,它的几何意义就是这两个向量所在平面的法线,其中。
2024-09-30 19:39:37
1726
原创 拉格朗日松弛(对偶)方法,次梯度法
拉格朗日松弛(Lagrangean Relaxation)方法在混合整数规划、非线性规划中应用非常广,并且线性规划的对偶本质上也是拉格朗日松弛。本文基于《Foundamentals of Supply Chain Theory》这本书中关于拉格朗日松弛的介绍,总结一下该方法。(P)mins.t.cxAxbDx≤ex≥0or binary在上面的模型中,cxbe是向量,AD是矩阵,部分x可以是 0-1 变量。
2024-09-16 21:30:03
1557
原创 Introduction to linear optimization 第二章全部课后题答案
不少题我参考了网上找到的一些资料的思路,但是有一些题目我觉得这些网上找到的答案也不太好,自己修正完善了下,少部分题目自己独立完成。费了好长时间,终于把这本经典理论教材第二章的课后题做完了。大部分都是证明题,很多都是比较有难度的。
2024-08-25 04:11:07
328
原创 Introduction to linear optimization 课后题答案第一章
第一章的课后题明显比第二章简单多了,第一章最难的反而是第一道题。
2024-08-11 01:15:10
353
原创 Lipschitz 连续,绝对连续
这个函数可以在定义域内找到不相交的子区间,它们的长度和小于某个常数,但是在所有子区间的绝对偏差和可以达到无穷大 (令。除了 Lipschitz 连续,还有绝对连续(absolute continuous, 不仅要求一致连续,还要求。经常听到这个名词, Lipschitz 连续比普通连续更强,不仅要求函数连续,还要求函数的梯度小于一个正实数。(对函数的绝对值求积分,不是无穷大,是存在勒贝格积分的条件)对于多变量函数,要求在任何一个变量上的梯度都小于等于。
2024-07-01 19:44:11
2141
原创 Introduction to linear optimization 第 2 章课后题答案 11-15
线性规划导论 Introduction to linear optimization (Dimitris Bertsimas and John N. Tsitsiklis, Athena Scientific, 1997), 这本书的课后题答案我整理成了一个 Jupyter book,发布在网址:欢迎访问与指正。
2024-06-22 01:12:10
408
Cplex, Ilog, OPL 使用手册,manual
2017-11-14
Cplex OPL 使用手册,OPL 编程
2017-11-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人