- 博客(30)
- 收藏
- 关注
原创 二次型对自变量向量的导数
将形如f=xTAxf=\boldsymbol{x^TAx}f=xTAx称为二次型,其中x\boldsymbol xx是nnn维列向量,A\boldsymbol AA为n×nn\times nn×n的矩阵,fff为标量。二次型由于其良好的正定性、凸性在控制理论中经常用在判断系统稳定性、最优控制等。但是有个数学上的疑问,如何求二次型函数对自变量向量的导数(1)dfdx=?\frac{\text d...
2018-11-19 21:50:59
10351
8
原创 变分法与最速降线问题
本文主要参考变分法及其应用.在诸多优化问题中,优化的变量是一个函数,也就是说需要找到一个函数,使得某个特定的目标最小。固体力学中的最小势能原理处于平衡状态的弹性体,真实位移场使得系统总势能去最小值。基于势能原理,也发展出了固体力学中的变分解法,也就是求出使得总势能最小的位移场,该位移就是真实的位移解答。同样变分法也可以用于最优控制中,求取控制律,使得系统系统的性能指标最优,而控制律通...
2018-11-17 16:21:41
11155
3
原创 动态规划之背包问题
1. 一维背包问题0-1背包问题给定一个载重量为CCC的背包,有nnn个物品,每个物品的重量为wiw_{i}wi,每个物品的价值为viv_{i}vi,如何往背包中装物品使得背包中的总价值最大化。max  V=Σvixis.t.  Σwixi≤C     &a
2018-10-18 14:20:58
491
原创 动态规划思想
1. 动态规划与分治动态规划(Dynamic Programming, DP)方法常常被用来寻找最优解。类似于分治策略,将原问题分解为子问题,然后对子问题进行求解,再子问题的解综合得到原问题的解。但是用递归的算法实现分治策略时,往往和大量重复求解子问题,导致了指数级的时间复杂度。有两种方法可以避免重复求解子问题,一是在递归求解的过程中,将子问题的解记录下来,后续遇到相同子问题时,在常数时间内取出...
2018-10-13 12:22:57
334
原创 排序方法
1. O(n2)O(n^{2})O(n2)的排序方法1.1. 冒泡排序1.2. 选择排序2. O(nlg(n))O(nlg(n))O(nlg(n))的排序方法2.1 归并排序2.2 快速排序3. 非比较的排序方法3.1. 计数排序3.2. 桶排序一维数组的排序算法使用的场合很多,在许多面试中也经常被问到(虽然我还没有被问到过)。排序算法主要有插入排序、冒...
2018-10-10 08:55:33
364
原创 VSCode编译、调试Python(Python in VSCode)
VSCode是微软开发的轻量级编辑器,加装扩展程序后,可以用来编译、调试程序,十分方便.VScode个人觉得VSCode的优点主要有:轻量级,相较于VS Studio,VSCode要小地多跨平台,VSCode在Windows, MacOS和Linux上均可以使用扩展性,编译C++和Python等其他语言Git,VSCode内嵌Git可以方便地进行程序的管理本文参考VSCode官网...
2018-10-02 10:41:07
24138
原创 最大值队列、最大值栈
要求实现一个队列或栈,并且在O(1)的时间内,完成pop()、push()和max()的操作。1 最大值队列《剑指Offer》面试题59用一个正常的队列实现数据的插入和删除,满足FIFO的关系。用一个双向队列保存当前队列中的最大值,并且保证当前最大值始终位于双向队列的前端。如何维护这个双向队列呢?新数据插入时,将双向队列后部所有比新数据小的元素删除,因为这些元素不可能是未来的最大值了。...
2018-09-29 23:33:13
2241
原创 二分查找及其变式
对于在有序的向量可以使用二分查找的方法,在log(n)log(n)log(n)的时间复杂度内完成查找。应当指出二分查找必须基于“有序”的前提条件。1 基本程序实现在一个数组中,查找一个数字的基本程序如下所示。int binary_search(const vector<int>& nums, int target) { // -1 means target doe...
2018-09-29 13:26:48
570
原创 虚函数与纯虚函数
1 虚函数C++中的虚函数是实现运行多态的重要工具。关键字为virtual。下面程序中定义了基类Base和派生类Deriv,派生类中有与基类中的同名函数print().如果定义一个基类指针,但是将其指向派生类对象。那么将指针的类型,调用基类中的print()函数。#include &amp;lt;iostream&amp;gt;using namespace std;class Base {publ...
2018-09-29 13:22:42
188
原创 洗牌算法Fisher-Yates shuffle
LeetCode 519. Random Flip Matrix中碰到了如何随机地挑选矩阵中的一个元素的问题。实际上这题目的思路并不难想。原始算法step1:生成从0到所剩元素个数之间的随机数kkk;step2:从头开始开始遍历,找到第kkk个尚未取出的随机数,将该数取出,并将剩余元素的数量减一step3:重复step1,step2,直至所有元素均取出首先,所有元素被取出均...
2018-08-29 09:10:20
1297
原创 K选取问题
k选取是一个经典的算法问题,很多教科书和算法题都有该问题。找到无序的数组中第k小的数(此处约定最小值为第一小的数)。很容易想到将数组排序,然后取出下标为k-1的元素,该算法的时间复杂度为O(nlgn)O(nlgn)O(nlgn)。显然有更快的方法。大顶堆法一个大顶堆维护了弱序关系,堆顶为最大的元素。创建一个大顶堆,遍历数组,如果堆中的元素数量小于kkk,则继续向堆中添加元素;如果堆中的元素...
2018-08-05 14:07:14
1230
原创 全排列 递归方法C++
全排列给定组数字或者一个字符串,长度为n,打印出其全排列,例如:abc的全排列有:abc, acb, bac, bca, cab, cba六种。可以用递归的方法求解,即先固定第一个元素,然后求出后n-1个元素的全排列。当然第一个元素可能是任字符串中的任一个字符。C++代码如下:#include <iostream>#include <string>u...
2018-08-05 11:30:45
11171
原创 const关键字与指针
const是C/C++中定义常量的关键字,有利提高代码的鲁棒性和可读性。const经常与指针一起使用,有指针指向的内容为常量和指针本身为常量两种,容易引起混淆。指针指向的内容不变#include <iostream>using namespace std;int main() { int a[] = {1, 2, 3, 4}; const int*...
2018-07-30 22:42:18
238
原创 C++字符串string与整型int的相互转换
C++中没有直接的函数可以进行字符串和整型的相互转换。可以手动编写程序进行转化,但要考虑负数,前面有空格,和整数不能以0开头等情况,较为复杂。利用stringstream进行字符串和整型的相互转化,stringstream的头文件为sstream。下列函数可以方便地实现C++中的字符串与整型的相互转化。string int2str(int n) { stringstream s...
2018-07-18 14:28:26
3650
原创 c++ make_heap(), pop_heap()函数
c++中的make_heap(), pop_heap()的头文件为algorithm。作用与priority_queue中的成员函数相同,可以单独使用。使用方法make_heap 在容器范围内,就地建堆,保证最大值在所给范围的最前面,其他值的位置不确定pop_heap 将堆顶(所给范围的最前面)元素移动到所给范围的最后,并且将新的最大值置于所给范围的最前面push_heap...
2018-07-04 14:53:02
20104
1
原创 划分(partition)算法
quicksort中的快速划分快速排序quicksort的核心是对无序向量进行快速划分,选取一个元素作为轴点(pivot)对向量进行划分,确保比轴点大的元素在轴点之后,比轴点小的元素在轴点之前,将原向量划分为两个子向量。算法思想: 1. 取一元素为轴点(pivot),不妨取首元素为轴点,并将轴点的值备份; 2. 从向量的起始(low)和末尾(high)同时进行扫描; 3. 若nums...
2018-06-28 09:44:01
10326
1
原创 如何判断整数是否是2、3、4的乘方(幂)
在LeetCode 342. Power of Four和LeeCode 326. Power of Three中有关于如何判断整数是否是4或者是3的乘方问题,并且不用循环和递归。如果使用循环或者递归可以很容易地通过不断地除以基数进行判断,如果要求不能使用循环或者递归,那该问题就有难度了。乘方数的重要性质:已知整数MMM是整数nnn的乘方即M=niM=niM=n^{i},若将MMM表示为n...
2018-06-26 14:03:10
798
原创 0x55555555,0xaaaaaaaa...等究竟是什么?
在刷到LeetCode 190. reverse bits中,抱着学习的态度对Discuss的大牛代码进行学习,发现了使用很巧妙的位操作的答案,其代码如下,该代码为LeetCode 190 Discuss高赞代码,非原创。 uint32_t reverseBits(uint32_t n) { n = (n >> 16) | (n << 16); ...
2018-06-08 15:13:08
13716
1
原创 C/C++整型上下限INT_MAX INT_MIN及其运算
C中常量INT_MAX和INT_MIN分别表示最大、最小整数,定义在头文件limits.h中。1. INT_MAX,INT_MIN数值大小因为int占4字节32位,根据二进制编码的规则,INT_MAX = 2^31-1,INT_MIN= -2^31.C/C++中,所有超过该限值的数,都会出现溢出,出现warning,但是并不会出现error。如果想表示的整数超过了该限值,可以使用长整型long l...
2018-05-12 13:31:19
114572
原创 c++容器 set 自定义排序
set c++ reference是c++中的一种容器,set可以用二叉树搜索树实现,set有两个特点:1. set中的元素不允许重复;2. set内部会维护一个严格的弱排序关系。上述两个特点实际上都依赖set的compare函数,compare函数判断两个元素相等就是相等,与元素本身没有直接的关系。默认定义了compare函数利用set内部默认的compare函数,可以将整数从小到大排序,将字符...
2018-04-03 16:31:49
26320
3
原创 不相邻问题
链式不相邻问题问题:有Σ:{1,2,3⋯n}\varSigma :\left\{ \text{1,2,}3\cdots n \right\} ,从Σ\varSigma中取出mm个数,并且此mm个数不能彼此相邻,试问有多少种取法。 这个问题在组合数学中有结论,也给出了证明,但是我没有足够的耐心把证明看完,自己用高中排列组合的知识导出了结果,供参考。如下方示意图所示, 第一步,将mm个球摆成一排放桌
2018-04-03 11:00:21
7093
1
原创 c++ unordered_map 判断某个键是否存在
unordered_map c++ reference 是c++ 哈希表的实现模板,在头文件<unordered_map>中,存储key-value的组合,unordered_map可以在常数时间内,根据key来取到value值。如何判断unordered_map 判断某个键是否存在呢?find函数。iterator find ( const key_type& key );如...
2018-04-03 09:21:49
100892
4
原创 cmake编译c++程序
当在Linux系统下编写程序时候,如果没有类似于visual studio、vs code等IDE(集成开发环境)时,如何编译、运行程序呢?一种方法是编写makefile文件,用makefile文件管理程序脚本之间的相互依赖关系,其语法相对比较复杂。另一种有效的方法就是利用cmake工具,自动生成makefile文件。cmake是什么CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述...
2018-03-16 21:03:39
22509
3
原创 Bitmap算法及其应用——求素数
在学习hashtable的时候,发现用于标记懒惰删除的数据结果是Bitmap,详见数据结果习题解析(c++语言)(第三版) 邓俊辉编著。理论上来说,可以用一个数组或者是std::vector来进行标记,但是Bitmap则具有更高的空间效率和时间效率。下面主要参考该书,对Bitmap进行了学习。1. 什么是Bitmap1Byte = 8 bit,而Bitmap的每个bit位对应0或者...
2018-03-08 20:30:28
705
原创 ubuntu vim复制内容至系统剪切板
在VIM中编辑的程序有时需要复制到网页、gedit,或者这window系统中(如果ubuntu是虚拟机),那么用原先的复制y(yank)和p(paste)就不行了。一、vim寄存器为何用y,p可以在vim之间复制内容,却不能将内容复制到其他软件中呢?因为y是将内容复制到vim的一个寄存器,而这个寄存器并不是系统的剪切板。vim中也有系统剪切板的寄存器,需要用其他命令进行操作。:help regis...
2018-03-03 20:17:49
6311
1
翻译 【译】交叉验证(Crossd_validation)
按自己的理解对scikit-learn中的模型选择中的交叉验证部分,进行了简单的翻译,供大家参考、学习。
2017-08-25 16:41:30
4486
原创 Pandas的数据类型
Pandas是Python的一个非常常见的第三方库文件,是一个Powerful python data analysis,由Wes Mckinney & PyData Development Team开发的的免费库文件,是python做数据分析、机器学习的神兵利器。下面参考Pandas的帮助文档,介绍Pandas的基本数据类型,供自己自学和大家参考。
2017-07-17 14:41:25
1733
原创 SVM学习笔记
Support Vecot Mechine, SVM 学习笔记SVM一般翻译为支持向量机,最初在文本分类领域展露头角,后成为机器学习的主流技术,其求解较神经网络一般要高效,最初只适用于二类划分。理论上来说,通过one-vs-all的思想,二类划分的方法都可以转化为多类划分。下面主要参考吴恩达的机器学习课程和周志华的“西瓜书”写的学习笔记,供大家参考、交流:
2017-05-16 16:48:38
493
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人