- 博客(63)
- 资源 (17)
- 收藏
- 关注
原创 全排列 & 任意排列 & 任意组合 & 笛卡尔积 算法
排列和组合的区别:排列:要求顺序,比如 [1,2] 和 [2,1] 是两个不同的排列 组合:不要求顺序,比如 [1,2] 和 [2,1] 是两个相同的组合全排列:给定n个数,返回长度为n的所有排列 比如 [1,2,3] 的全排列是[[1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 1 2] [3 2 1]] 可采用回溯法,遍历n叉树,得到所有路径任意长度的排列:给定n个数,返回任意长度的所有排列 比如 [1,2,3] 的任意长度的排列是[[1] [1 2] [..
2021-04-06 11:39:38 1736
原创 链表反转 - 链表排序 算法
链表反转:想象有1个新链表,每次从旧链表取出一个元素,然后插入到新链表的头部链表排序:先将链表拆分为2个子链表 使用快慢指针,快指针每次走2步,当快指针走到尾部时,慢指针即在中间位置 对2个子链表递归排序,返回2个有序的子链表 合并2个有序子链表package mainimport ( "fmt")type node struct { next *node value int}func newNode(x int) *node { return &n
2021-04-02 15:18:24 237
原创 单向扫描的快速排序解法
快速排序的难点在于,根据锚点划分为2个子区间,经典解法是这样:使用 i、j 两个指针,从左右两边双向扫描,直到 i、j 相遇 一会移动 i 指针,一会移动 j 指针,容易弄晕本文只需 1个指针,从左向右单向扫描,更加容易理解和记忆,大致思路如下:经典解法是扫描结束后,才得到2个子区间 本解法初始就划分为2个子区间,其中 左区间:只有锚点 1个元素 右区间:有 n-1 个元素,待检测 从 left+1 ~ right 开始扫描 每遇到一个小于锚点的元素,就将其交换到左区间,左区间长
2021-04-01 17:51:07 746
原创 简单好记的二分查找边界算法
先上代码package mainimport ( "fmt")func binarySearch(nums []int, left, right, target int) (targetPos, leftPos, rightPos int) { for left <= right { mid := left + (right-left)/2 if nums[mid] == target { leftPos, rightPos, targetPos = left, ri
2021-03-31 11:26:07 529
原创 github 443超时问题解决
错误描述:fatal: unable to access 'https://github.com/xxx': Failed to connect to github.com port 443: Operation timed out解决方法:(1)准备tizi,确保可以正常访问外网(2)查看tizi工具的https端口号,比如 1234(3)设置git https代理,本机命令行执行:git config --global https.proxy "127.0.0.1:1234"(.
2021-03-12 15:57:21 7368
原创 go泛型简单例子
先上代码:package mainimport ( "fmt")type Lesser[T any] interface { Less(y T) bool}func Sort[Elem Lesser[Elem]](list []Elem) []Elem { for i := 0; i < len(list)-1; i++ { for j := 0; j < len(list)-1-i; j++ { if !list[j].Less(list[j+1]) {
2021-02-23 15:56:08 438
原创 gofunc - 简单好用的go test工具
gofunc简单好用的go test工具使用场景用于快速测试某个函数或表达式,比如有个函数用于删除slice里的一个元素:func DeleteSliceInt(data []int, i int) []int { return append(data[:i], data[i+1:]...)}正常的单元测试需要新建 xxx_test.go 文件,编写 Testxxx 函数,这...
2020-04-15 14:44:31 522
原创 redis cluster集群批量执行命令工具
github地址:https://github.com/throne-developer/redis_cluster_multi_op对redis集群执行批量操作,解决redis集群不能使用pipeline的问题。使用方法: (1)修改config.json,设置redis集群的ip列表和密码,以及要执行的命令文件路径{ "redis_addrs":[ ...
2020-03-27 18:21:35 495 1
原创 golang处理json转义符 \u0026
设置json序列化不转义func JSONMarshal(t interface{}) ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) encoder.SetEscapeHTML(false) err := encoder.Encode(t) return buff...
2020-02-26 19:16:40 23888
原创 C++使用libcurl+zlib解压http gzip数据
开发背景在android ndk环境下使用libcurl发起http请求,不巧的是,当前使用的libcurl编译时没有包含zlib模块,导致无法解压gzip数据。考虑到ndk自带zlib包,可以使用zlib手动解压gzip数据,避免再次编译libcurl。源码实现(1)使用zlib解压gz数据int gzDecompress(const char *src, int srcL...
2019-12-12 18:39:27 1860 2
原创 bp神经网络推导及python实例
bp神经网络BP(back propagation,反向传播)神经网络(neural network),通常指具有三层网络结构的浅层神经网络。神经网络由一个个神经元(Neuron)组成,神经元由输入、计算、输出单元组成。对应上图输入为x1,x2,⋯ ,xnx_1,x_2,\cdots,x_nx1,x2,⋯,xn和截距+1+1+1,输出为:y^=hw,b(X...
2019-09-10 18:50:29 3785
原创 FM算法推导及python实例分析
FM算法FM(Factoriztion Machine,因子分解机)是在逻辑回归基础上,增加了特征交叉项的参数学习,模型公式为:y^=w0+∑i=1nwixi+∑i=1n−1∑j=i+1n<vi,vj>xixj\hat y=w0+\sum_{i=1}^n w_i x_i+\sum_{i=1}^{n-1}\sum_{j=i+1}^n<v_i,v_j&a...
2019-09-09 11:46:44 1722
原创 softmax回归推导及python实例分析
softmax函数softmax函数也称为归一化指数函数,将每个元素的范围控制在(0,1)之间,并且所有元素的和为1。函数公式为:σ(zj)=ezj∑k=1Kezk,j=1,...,K\sigma(z_j)=\frac{e^{z_j}}{\sum_{k=1}^K{e^{z_k} }}, j=1,...,Kσ(zj)=∑k=1Kezkezj,j=1,...,K计算步骤为:每...
2019-09-05 11:58:29 1661
原创 逻辑回归推导及python实例分析
求导公式(1)log函数求导log(M∗N)′=logM+logNlog(M*N)'=logM+logNlog(M∗N)′=logM+logN(logMN)′=NlogM(logM^N)'=NlogM(logMN)′=NlogM逻辑回归Logistic Regression是广义线性模型的一种,可以用线性函数表示分类的超平面:Wx+b=yW...
2019-09-03 19:16:30 972
原创 GBDT回归算法实例分析
声明:本文仅为个人学习GBDT算法的记录,如有错误或不专业的地方请指教!源码实现参考Github:https://github.com/Freemanzxp/GBDT_Simple_TutorialGBDT简介GBDT的全称是Gradient Boosting Decision Tree,梯度提升决策树,它在普通决策树的基础上添加了梯度提升方法,从1颗决策树演变为多颗决策树,逐步...
2019-08-27 10:12:16 6552 1
原创 GBDT推导-拟合负梯度和残差
梯度提升树-为什么拟合负梯度将学习器F看做一个参数,损失函数为L(y,F)L(y,F)L(y,F),为使L损失最小,采用梯度下降法:Fm=Fm−1−dLdFF_m=F_{m-1}-\frac{dL}{dF}Fm=Fm−1−dFdL提升树采用加法模型(基函数的线性组合)与前向分布算法:Fm=Fm−1+TF_m=F_{m-1}+TFm=Fm−1+TT为训练的新树,所以有:...
2019-08-26 11:35:36 2314 1
原创 线性回归算法推导
微积分基本运算法则法则一:对 y(x)=cxny(x)=cx^ny(x)=cxn ,其针对 x 的偏导数为 ∂∂xf(x)=cnxn−1\frac{\partial}{\partial x}f(x)=cnx^{n-1}∂x∂f(x)=cnxn−1法则二:常数的微分为 0法则三:偏导数可以穿透累加器,即∂∂x0∑i=0nF(xi)=∑i=0n∂∂x0F(xi)\frac{\p...
2019-08-23 18:25:16 621
原创 windows 监控进程-自动拉起脚本
需求:监控进程 myprog.exe 是否正常运行,若未启动,启动 myprog.exe; 每隔10秒检测一次windows bat脚本代码如下:set cxmc=myprog.exe:START_CHECKtasklist | findstr "%cxmc%" || goto STARTPRO@echo process is runningping -n 10 127....
2019-08-12 10:49:03 5252 10
原创 msys2环境下解决cmake编译报错
在msys2环境下使用cmake编译32位的开源库时,执行cmake或make时报错,cmake是独立安装的,经过仔细排查(打印命令执行时的调试信息),发现cmake错误的使用的64位的gcc版本。这个问题可以通过显式指定cmake使用的gcc和g++程序解决,执行命令如下:cmake \ -DCMAKE_BUILD_TYPE="Release" \ -DCMAKE_CX...
2019-08-07 16:27:38 3303
原创 tesla k80显卡 配置支持opengl
系统:Window7显卡型号:tesla k80目标: 支持运行opengl程序k80在安装nvidia显卡驱动后,默认运行在TCC纯计算模式,不支持opengl。事实上k80支持TCC和WDDM两种模式,在WDDM模式下支持opengl。配置方法:(1)以管理员模式打开Windows命令行(2)进入C:\Program Files\NVIDIA Corpor...
2019-07-29 17:14:13 9836 4
原创 windows 模拟键盘消息(支持非焦点窗口)
焦点窗口可以用SendInput 发送模拟消息,对于非焦点窗口可以用PostMessage 向指定窗口发送模拟消息。假设窗口名称为"Trigger Rally", 模拟发送左方向按键(VK_LEFT)。代码如下:void keyPressed(const char* windowName, int keyVirtualCode, bool isPressed) { WO...
2019-07-29 16:57:36 2942
原创 redis跳表之golang实现(1)
欢迎关注公众号《后台开发探索之旅》。有序集合日常开发经常需要对数据进行排序,针对不同的场景,采用特定的排序方法,比如:(1)数组排序:将数值存入数组中,对数组进行冒泡、快排等排序方法,得到一个有序数组(2)二叉搜索:构造二叉平衡树,从根结点开始向左向右搜索,每次查找规模减半,最终找到目标节点(3)最小根堆:同样将数值存入数组中,对数组进行堆排序,保持最小值始终在堆顶,从而得到...
2019-05-17 14:15:50 581
原创 the evolution of lua - Lua发展史
欢迎关注公众号《后台开发探索之旅》。声明:本文内容来自于https://github.com/spin6lock/the_evolution_of_lua_zh_CNlua前身巴西被商贸限制,引入计算机软件和硬件受限,巴西人有强烈的民族情绪去创造自己的软件。三名作者都是同一个实验室Tecgraf的,这个实验室与很多工业实体有合作关系。成立的头十年,重点是创...
2017-11-05 16:24:47 798
原创 Lua语法分析(4)- 表达式
欢迎关注公众号《后台开发探索之旅》。上一节介绍了二元操作符,本节以Lua EBNF为基础,介绍Lua表达式的各种表现形式。Lua支持逗号分隔的表达式列表 explist,在多重返回值、多重赋值、参数列表等场景使用,示例如下:return a,b,ca,b,c=1,2,3local a,b,c=1,2,3f = function (a,b,c) endprin...
2017-11-05 16:22:53 753
原创 Lua语法分析(3)- 二元操作符
欢迎关注公众号《后台开发探索之旅》。表达式和语句表达式(expression)和语句(statement)是两个不同的概念,表达式可以返回一个值,语句是一条执行命令,没有返回值,每类编程语言的处理方法不尽相同。比如"a=1",在C语言里既可以作为语句,也可以作为表达式,因此可以连续赋值。如"b=a=1;",先执行"a=1",返回值为 a,再执行"b=a"。...
2017-11-05 16:21:11 1623
原创 Lua语法分析(2)- 控制语句
欢迎关注公众号《后台开发探索之旅》。上节回顾上一节介绍了几个Lua EBNF范式,总结如下: chunk可表示为多条statement。 statement可表示为两类,一类为if、for、return等控制语句,一类为exprstat(expression statement)表达式语句。 exprstat也分为两类,一类为func函数调用,一类为a...
2017-11-05 16:19:27 418
原创 重磅来袭 - Lua语法分析(1)
欢迎关注公众号《后台开发探索之旅》。Lua语法短小精悍,简单易学,非开发人员也可以编写一些简单的脚本,有开发经验的人更是分分钟上手。但麻雀虽小五脏俱全,要探索lua内部实现,必须全面掌握其语法。推荐阅读《lua5.1参考手册》,该手册为官方文档,由云风(游戏圈的大神,梦幻西游技术负责人)翻译。Lua EBNF范式代码是程序设计思想的落地,核心在于设计思想...
2017-11-05 16:17:08 851
原创 探秘lua词法分析
欢迎关注公众号《后台开发探索之旅》。词法分析实例在《递归下降算法》一节里,介绍过数学表达式的词法分析,现在正式开始lua语言的词法分析。以一段简单的lua代码为例:-- 输出最大值local a, b = 10.5, 20.00local c = math.max(a, b)local d = string.format( "maxval(%f,%f)=%f", ...
2017-11-05 16:13:07 1527
原创 小试牛刀-递归下降算法(3)
欢迎关注公众号《后台开发探索之旅》。递归递归从表面上看是函数的循环调用,比如函数func1内部又调用了func1,第一个func1压栈后,再将第二个func1压栈,如此反复下去,形成一个类似于数据结构的stack效果,因此基于堆栈的算法可以用递归模拟实现。但实质上,递归具有很抽象的数学思维,常用于降低问题规模。举个例子,计算数字1到5的全部排列,这个问题有专门的数学理...
2017-11-05 16:10:26 1770
原创 小试牛刀-递归下降算法(2)
欢迎关注公众号《后台开发探索之旅》。词法分析上一节介绍了EBNF范式,现在开始递归下降算法的第一个环节:词法分析。简单来说,词法分析就是切词,类似于搜索引擎的中文分词效果,将字符流切分为多个有类型的token。以下面字符串举例:10*20/(5+2*5)-10+20可以分解为数字、加、减、乘、除、左括号、右括号这几种token,对应的c语言枚举就是:...
2017-11-05 16:07:42 804
原创 漫谈lua虚拟机
欢迎关注公众号《后台开发探索之旅》。什么是虚拟机?大部分人都用c语言写过简单的小程序吧,写好后用编译器,比如turbo c或者visual c++编译生成exe文件,然后执行exe程序。exe文件里面其实存放着c代码对应的机器指令,执行exe就是调度cpu去一句句执行机器指令。lua与c语言不同的地方在于,lua不需要编译成exe文件,可以由lua虚拟机执行lua代码...
2017-11-05 16:05:52 2186
原创 小试牛刀-递归下降算法(1)
欢迎关注公众号《后台开发探索之旅》。递归下降分析是语法分析里的一个常用算法,具体理论可参考编译原理相关资料。这里介绍一个用递归下降算法分析数学表达式的实例,比如计算下面表达式的值:10*20/(5+2*5)-10+20在python命令行里我们可以轻松执行命令:print 10*20/(5+2*5)-10+20得到计算结果=23,但要自己实现这个功能该怎...
2017-11-03 17:17:14 3099
原创 一颗璀璨的月光宝石--Lua
欢迎关注公众号《后台开发探索之旅》。谁在用lua?可能很多人都不知道lua语言的存在,其中包括工作多年的程序员,但有很多知名软件都是使用了lua语言,比如《魔兽世界》的客户端插件、《愤怒的小鸟》所有关卡、《天龙八部》的游戏逻辑、OpenResty服务端框架、redis-lua等等,可以说,大部分游戏都在重度使用lua来实现玩法逻辑。为什么lua在游戏行业这么受欢迎?...
2017-11-03 10:25:23 605 1
原创 linux文本远程编辑
由于目前工作的需要,要在linux环境下做一些业务功能的开发,开发语言主要为shell、python、lua之类的脚本语言。 由于个人之前一直用Visual Studio写C++代码,习惯于图形化界面的键盘鼠标操作,因此找个linux环境下的顺手的文本编辑器,但发现很难!!!个人使用的linux系统为centos7.0,这里记录下对于几种文本编辑器的心得。vim 优点:适合命令行界面下的简单修
2016-08-14 22:43:13 3941
原创 网页抓取神器hawk使用心得
(1)抓取目的现在网站有大量数据,但网站本身并不提供api接口,如果要批量获得这些页面数据,必须通过网页抓取方式实现。 比如某房产网站的二手房数据,在页面上很整齐的展示,因此可以通过分析网页的html源码,找到总价、单价、位置、户型等数据,并最终实现批量抓取。(2)抓取原理1)首先要获取网页的html源码,这个并不难,在浏览器里右击菜单里选择“查看网页源代码”就能看到html源码,页面上能看到的文
2016-08-07 12:30:24 6573 2
原创 Linux下安装ActiveMQ CPP
ActiveMQ CPPActiveMQ CPP是用C++语言访问ActiveMQ的客户端开发库,也称cms(cpp message service),安装cms开发库需要先安装一些基础库。(1)cppunit打开http://activemq.apache.org/cms/building.html页面,这里介绍了cms build时用到的依赖库。 cppunit下载页面: https://s
2016-04-04 11:32:50 5055 3
原创 跨平台C++服务器程序开发 (4)tcp socket状态图(server端)
套接字状态在上一节中,介绍了文件描述符的概念,我们可以看到socket套接字与磁盘文件的读写方法很相似,但套接字比普通的文件描述符多了一种状态,每个打开的套接字都对应一种状态,Windows和Linux都可以使用netstat命令查看。通过观察套接字状态,可以检查服务器程序是否正常工作(监听端口是否打开),排查网络故障(比如为什么连不上服务器),优化代码(服务器卡顿,占用大量资源)等。测试程序通过一
2016-03-13 14:24:30 1738
原创 跨平台C++服务器程序开发 (3)Linux文件描述符
Linux文件描述符在Linux系统中几乎所有可读写的对象都可视为文件,比如标准输入输出、磁盘文件、套接字、管道等,都可以用read函数读取数据,用write函数写入数据。 这一点相对于Windows系统来说更加统一,在Windows系统中上面列举的每个对象都有其专门的一组函数读写。 下面分别描述这几种文件对象。标准输入输出在C语言中,printf向控制台窗口输出信息,scanf从控制台窗口输入信
2016-03-06 23:30:34 1427
原创 跨平台C++服务器程序开发 (2)服务器端口
服务器&客户端现实中有许多软件是分为客户端和服务器两部分,常见的比如Mysql,分为Mysql Client和Mysql Server,Client负责输入命令和结果显示,Server负责存储数据和返回查询结果。再比如网络游戏,玩一款游戏需要先下载客户端,启动launcher登录器后,需要选择服务器,比如电信1区,然后连接服务器进入游戏。 可以说,任何需要联网的软件都需要服务器程序。客户端和服务器进
2016-03-01 23:46:46 1515
原创 跨平台C++服务器程序开发 (1)了解跨平台开发
跨平台服务器程序的作用所谓跨平台,主要指Windows和Linux两个主要平台。如今绝大多数服务器后端程序运行在Linux平台,这是因为Linux具有免费、开源、远程操控方便、易于大规模运维管理等优点,相比之下,Windows平台更适用于个人用户的办公和娱乐,因此服务器程序多数要在Linux平台上运行。但是在开发过程中,大部分开发者更习惯使用Windows平台的Visual Studio(简称VS)
2016-03-01 12:53:00 3004
多功能矩阵计算器 vc2010实现
2010-11-20
ADO.NET连接字符串大全
2010-09-13
Visual SourceSafe PPT中文操作教程
2010-04-09
Microsoft Office 2003 技巧1000例
2009-07-17
明明白白C指针 指针的详细剖析
2009-07-17
cgi教程 初级入门电子书
2009-07-15
Microsoft Visual C++ 2008 范例程序
2009-07-15
时钟小助手 安装程序
2009-07-04
典型数据结构(完整代码)
2008-05-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人