自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于剪枝的回溯法

主要内容好久没上Leetcode,发现首页居然有一道中等题"全排列II"错了好多次一直没对,发现是带剪枝的回溯类型,做完了就稍微记录一下。今天主要通过两个例题,一是回顾回溯法,二就是学会回溯的同时剪枝。简单的全排列力扣中的Q46,原题如下:题目的温馨提示也很体贴地告诉了你数组中的各元素不相等,所以轮不到剪枝的技巧派上用场。直接贴出代码:class Solution {public: vector<vector<int>> ans; vector&lt

2022-04-05 12:54:55 210

原创 吴恩达_MIT_MachineLearning公开课ch05

回顾神经网络ch04我们实现了属于自己的神经网络。一个完整的神经网络需要一个模型表示,比如网络层数及每一层的神经元个数。除此之外我们要保证网络的流动性,即实现前向传播和反向传播。前向传播是比较简单的,即进行矩阵运算以及sigmoid激活函数处理。反向传播需要用到链式求导法则,同时要求中间“误差”δ,需要自己好好理解。将数据进行切分我们按照惯例会把手上的数据按照6:2:2的比例划分成—训练集、可行集、测试集,英文分别为train、cross validation、test。why?其实回想一下我

2021-11-12 12:07:15 741

原创 吴恩达_MIT_MachineLearning公开课ch04

前章回顾在ch03中我们做了一个有趣的任务,就是做一个手写数字的分类。我们的数字包含了0~9共10类,于是我们的第一思路是训练出10个二元线性分类器。我们用一个大矩阵来存储每个线性分类器拟合出来的Theta,大矩阵的某一行就是专门为某一数字拟合出来的系数,当我们的原数据对应与系数相乘并且经过激活函数sigmoid之后就会得到属于此数字类别的概率。同时我们初步认识了神经网络,知道其能去学习一些非线性的特征,其中的隐藏层hiddenlayers利用的是不再是我们直接喂入的数据了,最后的正确率十分可观。

2021-11-10 23:01:02 995

原创 吴恩达_MIT_MachineLearning公开课ch03

回顾逻辑回归逻辑回归常用于分类问题。里面常用到的一系列公式函数不能忘记。比如:交叉熵损失函数用于度量当前拟合系数theta的损失值、Sigmoid激活函数,用于将值压缩至(0,1)区间内作为概率处理、为损失函数以及对应的求导公式加上一个惩罚项等。但我们上一轮做的是二分类问题,就是问题只有两种解,今天是一对多问题。多元分类也称一对多分类。就是有好几类等待我们进行划分,我们的策略是:将某一类的标签置为1,另外所有的标签置为0训练出一个二分类“分类器”。说白了就是一组系数,这组系数可以求解出

2021-11-03 10:38:12 474

原创 从BinarySearchTree到RedBlackTree之AVL

AVL树没什么好多说的,就是可以优化我们在BST中遇到的有序数组形成的"树"退化成链表的情况。从中引入了旋转、平衡的概念,并不打算解释,单纯练练代码吧。。。。最后还有一个大头RedBlackTree,不知道鸽多久。。code一开始是LeetCode检查平衡的一个题目,挺好的,建议做一做!// LeetCode 110 判断一棵树是否为平衡树,带领我们初步地认识AVL TREE/** * Definition for a binary tree node. * struct TreeNod

2021-11-01 15:46:50 92

原创 吴恩达_MIT_MachineLearning公开课ch02

回顾回归我们在ch01使用gradient descent[梯度下降],实现了linear regression[回归]问题。简单地来说,我们在读入数据后提取出X[Varibale,factors etc]作为我们的变量,或者说就是影响一个问题的一系列因素 和 Y[标签]问题的解。我们定义了损失函数,函数只包含了变量theta,我们的目标就是用损失函数对theta进行求导,迭代更新不断缩小损失值直到最后收敛。回归常可以用于的问题就是预测,比如原本数据中给你了一大堆影响房价的因素[X:Factors]

2021-10-27 21:56:00 212

原创 从BinarySearchTree到RedBlackTree之BST

起源起源是看侯捷大佬的STL源码解读+Linux内核设计的时候都遇到了红黑树的问题,想必其作为强大的底层支撑的存在是很重要的。但基于那天翻阅知乎被某条牛逼评论刺激到后,才有了循序渐进完成全部的想法。Binary_Search_Tree二叉搜索树,二叉排序树等等名称。其核心就是左子树的key<根的key<右子树的key,在其操作中属delete操作最为复杂。其包含的一些结论,我们的二叉搜索树按照树的中序遍历来就是一个有序的升序序列,有兴趣的话可以去做一些比如 (根据某两个遍历顺序还原

2021-10-23 18:15:48 76

原创 C开源项目-TinyHttp解读(下)

中上小结前面两部分,我们主要分析了服务器端的一些基本功能和义务。服务器端要把自己绑定到一个众所周知的端口上去,要去监听客户端的请求。服务器端要学会辨认客户端发送来的Http报文头,识别两种主要方法“GET、POST”,可以发送一些不同的应答报文(此处以代码表示)“404,200”。千万不要担心我们迟迟未分析simpleclient,其用到的我们在server全看过的。cgi是什么我也不知道,我也是现看的,还处于一知半解状态。传送门:CGI是什么官方地下个定义:CGI是通用网关接口。学过计网的

2021-10-23 17:45:37 372

原创 C开源项目-TinyHttp解读(中)

解读(上)的总结上篇解读主要讲解了server服务器端的几个流程,不要担心我们的simpleclient复杂程度,其远远比不上server,只要把server读懂那个就是piece of cake。代码分析accept_request()函数分析/**********************************************************************//* A request has caused a call to accept() on the serv

2021-10-18 00:15:26 287

原创 C开源项目-TinyHttp解读(上)

项目简介此项目可以自行在GitHub上进行下载,作者的ReadMe文档也写得是比较详细的。这里用到了较多的Unix编程,不会的可以一点一点去查。(实名感谢我们家杰佬发给我的APUE,可以当字典查)项目内容其实就是实现了一个轻量级服务器的功能,同时源代码也包含了一个simpleclient的文件,用于生成一个用户端。这和计网课上的用Java写TCP/UDP很像,但C会显得更麻烦一些,但总认为基于Unix给人一种高大上的感觉。代码分析我这儿就直接按照作者在README中给出的阅读顺序来浏览了。由于

2021-10-17 18:09:56 1160

原创 吴恩达_MIT_MachineLearning公开课ch01

之前一直和Tensorflow、PyToch一些框架进行纠缠。现在显然幡然醒悟,这样是不对的,我们不是去学怎么搭别人的顺风车,我们要做的是自己造轮子造车。任何课程评价都可以说是对这一门五星级课程的亵渎了。概念讲述了机器学习的几种模式,包括了监督学习、无监督学习、半监督学习等。监督学习就是我们知道了输入与输出的关系,比如等会作业里要做的假设了一个代价函数,而我们的目标就是不断去缩小这个损失。其他的先不说,这一章主要讲的就是监督学习下的回归问题,而且是线性回归,也就是Linear regression

2021-08-19 22:09:28 212

原创 OS-Revision---内存管理

这是OS的最后一次复习了。程序装入、存储结构存储结构存储器的多层结构,这一点在计算机系统的“存储器管理”章节也会涉及到。我们只需要了解概述即可,并不要理解硬件的工作原理。层级结构呈金字塔形,从上向下依次应为:1.CPU寄存器2.Cache高速缓存3.主存储器4.磁盘缓存(非实际存储介质)5.固定磁盘6.可移动存储介质从上到下的一个趋势就是,造价(成本)越来越便宜、存储容量越来越大、速度越来越慢。其中前四层是属于操作系统的存储管理的范围,所以断电则信息不复存在。而低二层则由设备管理,信息

2021-06-28 23:02:02 186

原创 OS-Revision---进程同步

信号量有一道12分的大题,好好复习,好好复习!我们在进程章讲过如果程序并发执行的话或许会失去“可再现性”,当时用的例子就是:A执行x = x + 1,B执行print(x),x = 0会产生不同结果。但并发执行显然又是能提高CPU运行效率的,所以我们现在就要考虑一种机制可以使既能并发执行也不失“可再现性”。并发进程间的制约关系简单来说:间接制约就是控制进程对临界资源的访问,对于这类资源需要由系统统一分配。直接相互制约就是使诸进程按序执行。生产者-消费者问题说到临界资源和信号量处理的经典例题

2021-06-27 20:05:53 154

原创 OS-进程

操作系统–进程进程概念程序的顺序执行:仅当前一操作(程序段)执行完后,才能执行后继操作。如下图所示:我们当然知道需要按序执行S1->S2->S3。因为b需要a,c需要b。顺序执行的特征:顺序性:即下一操作需要等待上一操作的完成。封闭性:程序在运行时会独占资源。可再现性:重复执行同一程序会产生相同的结果。根据上述所述,我们引出了“前趋图”的概念。图中,我们用一个结点表示一个进程。而用有向边“->”表示一种偏序关系,例如Pi->Pj中我们称Pi是Pj的直接前趋,Pj

2021-06-25 11:42:27 227

原创 OS-Revision--文件系统

27号还有最后一个实验报告要交。“综合实验二”要实现的是基于C语言的文件系统设计。那么我们肯定要先了解文件系统概念,架构,功能才行啦。文件、记录和数据项这三个概念需要理解一下后面会频繁涉及。我们用一个班级的概念来形象解释各项的含义。文件:是指具有文件名的若干相关元素的集合。对应于班级的概念,我们可以把一个文件视为包含所有学生信息的集合体-----正好是一个班级。记录:一组相关数据项的集合,包含了一个对象的某个方面的属性。对应于上述,我们可以把一个学生视为一条记录。这其中还有一个概念是“关键字

2021-06-24 13:05:00 307

原创 OS-Revision-处理机调度

处理机调度这一章相对来说比较简单,主要考点就是调度算法。而这些算法都是建立在初等数学的基础上的,不会特别难,一定要注意理解并且做题一定要细心。概念调度的本质就是一种资源分配。而我们设计调度算法其实就是在设计一种处理机的分配策略。调度层次1.高级调度:实现的功能是根据算法,将处于后备队列的作业从外存调入内存。同时为其创建进程、分配资源、放入就绪队列。以作业为对象。2.低级调度低级调度就是我们的进程调度,其实就是根据算法从我们的就绪队列中挑选出进程分配处理机资源进行处理实现。以进程为对象

2021-06-20 22:15:13 153

原创 CSAPP-Revision-ch03(四)---浮点代码目前不知道到底考不考

终……终于要结束啦!当然啦,痛苦的复习季才刚刚开始哈哈。栈帧结构我们都知道C语言的一个大特性就是函数(Function)。对于函数,我们都知道我们要转移控制权,我们需要把控制转移到调用的函数里。我们的调用方应该可以向被调用方传递参数,而函数也应该能够返回值,这就是传递数据。同时我们的被调用方也可以进行分配和释放内存。对于这么一种抽象,我们称之为“过程”。我们用”栈“这种后进先出的数据结构来模拟”过程“。我们用下面这张经典的图来体现很多内容:这是一个栈,栈地址是向低地址方向(栈“顶”方向

2021-06-20 14:17:55 253

原创 CSAPP-Revision-ch03(三)

预计第三章会在第四次完全结束。今天先跳过“栈帧结构”一节,因为发现作业题里好多关于“结构体 struct”和联合体“Union”部分的。昨日循环复习循环是很重要的一个部分,其已经相对是指令集合的一个使用了。而在这前面基本都是单条指令的学习和运用。下面来看这样一道题:和昨日的有异曲同工之妙,但刚好题型是反过来的,我们需要写汇编。我们一开始让栈指针rsp减了0x10,就是十进制下的16。其实就是刚好是4个int数据,4 × sizeof(int) = 4 * 4 = 16所以接下来就是连续的四

2021-06-19 18:01:36 356 2

原创 CSAPP-Revision-ch03(二)

这是昨天的战果。废话不多说,继续……跳转指令设想我们的高级语言程序里是不是经常会有“if else if else”等条件语句,我们通过设置这些条件有时候就需要指令的跳转执行。比如我们不满足if的条件,就得跳跃,跳到else里面执行,不能顺序执行if里的内容。我们通过“jmp”来实现这一目的。直接的jmp指令是无条件跳转的,这种无条件跳转又分为两种类型:1.直接跳转比如: jmp *%rax,我们就跳转到%rax寄存器包含的地址上2.间接跳转比如:jmp *(%rax),我们读出%

2021-06-18 00:11:06 182

原创 CSAPP-Revision-ch03(一)

程序的机器级表示上来就是chapter3属实是有点刚。主要这门课也是6.30就考,感觉OS应该会较简单,多复习一下这个先。先来张图心里有个13数。因为老师留下了两份作业,所以会采取复习到哪对应到作业上写题的方式。一次性当然也复习不完,好运!...

2021-06-17 00:10:18 210

原创 《罗书》--chapter1

高级数据结构最近开始看,《算法竞赛从入门到进阶》。这本书是罗老师写的,简称罗书。觉得这本书比起大众会难一些,同时又会比那本经典的《算法导论》教材更加通俗一些。并查集并查集思想常用“帮派”思想来转换,显得更加通俗易懂。比如,如下是自己做的一张图:其中,我们含有一个数组a,一开始初始化a[i] = i。可以这么理解,帮派1只有一个以1为代表的老大,以此类推……当我们要合并时,就会有这么一个变换,即某个帮派的老大带领自己的小弟们一起加入另一个帮派了。【过程二->过程三,老大3带领自己的小弟1

2021-04-17 17:24:58 236

原创 2021-03-23

OpenCV图像基础操作前面讲了如何导入,索引,遍历,写出图像。这些都是我们要对图像进行操作的基础,今天就讲几个比较基础的图像操作。图像叠加我们这里讲的图像叠加就是最简单的线性叠加,仅仅是把两个像素根据各自的权值比重求和即可。公式如下所示:算法思想既然这么简单,实际上实现起来也不困难,代码如下:#include<iostream>#include<algorithm>#include<string>#include<opencv2/opencv.h

2021-03-28 20:49:43 83

原创 OpenCV图像

OpenCV图像我们在前面讲了配置,讲了OpenCV一个很重要的数据结构Mat。那么Mat就是为了图像操作而生的。图像的遍历试想对于一个二维数组我们是如何遍历的?我们写嵌套循环,第一个循环是二维数组的行数控制,第二个就是列数控制。那么这一套也完全可以用到图像遍历中来!只是我们需要考虑的一个问题就是图像的存储是否是连续的呢?即第一行的最后一列和第二行的第一个之间的地址差值是相邻的么?好吧,实际上我们不需要通过大串代码去判断,因为有内置API!那么我们写一个遍历的形式:#include<

2021-03-21 14:06:50 2133 6

原创 OpenCV基础知识

OpenCV基础知识昨天略微讲了一下怎么配置,今天重装了OpenCV4.5版本的,发现已经没有那么麻烦了,不用CMake自己编译了。言归正传,英语好的小伙伴当然就是官网最好啦:OpenCV官方Tutorial我就充当一下搬运工!!MatMat很容易延伸到我们认识的一个单词即matrix,矩阵。大家都知道,一张图片在计算机中的表示实际上就是一个矩阵。矩阵中的值对应的就是每个像素点的值。Mat实际上是OpenCV封装好的一个类,其主要包含两部分:头部分存储了图片的长宽,存储地址已经用何种方式进

2021-03-19 16:23:48 164 1

原创 OpenCV

OpenCV失踪人口回归一波~~今天想更这个主要是看实习的时候看到了怡和??啊啊啊啊,(为了10000 HK Dolloars 为了 HKUST冲冲冲)!!(当然,这一期无聊一些。也是为了让自己回忆一下环境的配置。)很多基础知识和涉及图像算法就放到后面边revise边讲了,哭泣。(10000 HK-Dollars,求求)编译OpenCV源文件这是个体力活。。。我也忘了怎么搞来着,百度还是有很多好教程的哈。这里就提一下要用到的一些软件吧:GitCMakeVisual Studio首先

2021-03-18 23:12:35 100

原创

前言开学啦,没时间搞这个了!!要开始刷点算法题准备一些比赛和实习啦!!内容学会建图,学会用邻接表&&邻接矩阵存图。图的遍历方式,BFS && DFS。图的最小生成树,Prim && Kruscal。图的拓扑排序。图的最大路径与最小路径,CriticalPath && Dijkstra。了解图的一些基本概念,出度入度,连通分量等等······代码困难的地方基本有标注其余的都是一些比较容易的算法思想。有些算法直接采用实例给出

2021-03-02 22:58:39 113

原创

前言从这章开始我们接触的就是“一对多”的数据结构了。树这一数据结构也确实是得益于我们日常生活中观察到的树木。不难直观地观察出其特点,树有根,叶子,枝条。而我们也正是这么设计一棵树的。这里代码比较散,最后会全部整合后放在最后。# 一、学习目标:学会建树,遍历树。深入学习二叉树,明白一些定理(如树高度,结点个数等等),并且学会使用线索二叉树和最优二叉树(哈夫曼树)。树的定义正如我们在前言里说到的那么简单,一棵树就是由那些基本元素构成的。那么我们要用计算机表示它时该如何做一个方便程序员实现的定义

2021-02-23 18:14:15 136

原创

前言串实际上是我觉得比线性表还要boring的一章。因为相信很多人在学C的指针和char时已经非常精通了(exclude me)。依稀记得被strlen,strcpy,strcmp这些个函数支配的恐惧。那一部分人通过C++类的学习已经能写出一个很完整的string封装类了。但!但!我们不用从char起步用char*来进行实现,我们还是只要做到会使用,知道常用的操作即可!# 一、学习目标:掌握串的基本操作,深入学习KMP模式串匹配算法串的基本操作由于c++帮我们封装好了一个string类

2021-02-18 18:26:07 122 1

原创 单调栈

总得来说这相当于是一堂“习题课”。Theme is “Monum Stack”.(记得上次仿佛说还要讲一哈优先队列priority_queue,但着实又感觉没有啥特别好讲的,其类似于一个大顶堆(heap,我们会在排序章节讲到堆排序)。就是说基本情况下,优先队列的总是会把最大的数放在队头!!)本次就由浅入深准备了三道题,现在来集合成一个题解。题一:相信见到这种题目甭管大神不大神第一思路都是暴力吧, 因为简单,通俗易懂。暴力思路如下:每遍历到一个数就从其之后开始寻找第一个比其大的数,找到的话就用

2021-02-10 17:39:43 2177 2

原创 队列

前言之前因为种种原因还是把栈和队列分割了开来,所以今天把剩下的队列补完。直奔主题利用头文件,即这两行代码引入数据结构即可:#include<stack>#include<queue>#include<deque> // 双向队列当然啦,如果想自己实现也挺简单的哈,可以参考我在第一篇文章推荐的教材或者自己另寻他法。# 一、学习目标:掌握队列的基本操作,善于从题目中判断出是否用到此种数据结构(即能应用解决实际问题)队列的基本操作和栈相同,首先是建立一个

2021-02-04 18:37:52 152 1

原创 栈(待完成续篇:单调栈)

前言前面是复习完了线性表与线性表的链式存储结构,包括:单链表,循环链表,双向链表。当然啦,如果前两节没细看也莫得关系,因为这一节和前边关联不是特别大。我说的关联是应用层面的,不是实现层面的哈。这一节复习的是栈和队列,学过计算机系统的话应该对栈已经有很深的理解啦。cpp选手这儿就不着重讲如何实现这两种数据结构了哈,直奔主题利用头文件,即这两行代码引入数据结构即可:#include<stack>#include<queue>#include<deque> // 双

2021-02-01 22:16:00 132

原创 线性表链式存储结构

前言前面复习完了线性表。这里略微进行优缺点的分析。优点很明显,其是一个数组,数组操作简便,分析较为容易。那缺点呢?实则也很明显,事先不知道数据大小的时候只能往大的空间开,插入删除操作伴随着大量数据的移动。(当然了自己测试的都是些小数据)针对以上的缺点,一种名为“链表”的神奇物种就诞生了!怎么解决的这么多弱点呢,请听下面分解。啊对了,这之后需要稍微停更一会,要先把实习DEHAZE的算法流程图做完还要讨论可实施性。一、学习目标:了解链表的定义,掌握链表的基本操作,基本的时间复杂度。学习内容:

2021-01-27 21:17:13 439

原创 线性表

前言:1月21号的时候我boss打电话给我说要我好好准备一下,因为他帮我联系了阿里和头条的视觉方向的实习。因为面试有机考,于是这个寒假准备好好复习一哈opencv 重温数据结构。想来DS学完有一年了,但大二那年刚转到计软都没咋开窍。现在刚好有机会搞一波。用的教材是清华大学的那本数据结构(C语言版),然而我用的是C++来实现 ,没关系,开干吧!学习目标:了解线性表的定义,掌握线性表的操作,学会分析时间复杂度(由于是复习DS,时间复杂度不会深究,想仔细学习的话敬请参考算法导论哈)。学习内容:1

2021-01-25 16:23:11 207 1

空空如也

空空如也

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

TA关注的人

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