算法
文章平均质量分 57
InsZVA
啊 你们要是看了我发的博客很多错误的地方 指出来啊 我比较菜 坑人的
展开
-
scheme编译器-词法分析-生成记号流
目前做了数字、字符和标识符的DFAToken的数据结构:typedef union{ char* str; int i; double real;}Attribute;typedef struct{ std::string name; Attribute attributes;}Token;二进制 八进制 十六进制 十进制数 以及字符 的有穷自动机:boo原创 2015-04-11 15:58:29 · 1278 阅读 · 0 评论 -
打造先进的内存KV数据库-2 B树索引的建立(2)
索引的插入接上篇文章,我们实现了B树的查找log2n的算法,然而在后来的单元测试中,我发现了bug,在此进行修正,修正后的查找函数://查找指定索引 如果找到返回找到的node和position,失败的话返回最近的node和position,//并返回返回值相对于查询值是大了还是小了 true->小 false->大 优先返回大 供插入时插在前面func (bt *B_Tree) Select(原创 2015-12-19 13:51:36 · 1013 阅读 · 0 评论 -
打造先进的内存KV数据库-7 反射以及并发锁
反射反射作为一种代码组织形式,带来了极大的不安全因素,同时也带来了许多便利之处,通过方法、对象、类型名称来获得具体实例,可以避免大量if-else分支,使得代码优雅,monkeyDB的服务端代码最后采用反射组织。并发锁多线程访问同一资源时,需要对资源加锁,否则可能会得到预料之外的后果。由于内存数据库优越的读写性能,锁的粒度可以尽量大,monkeyDB使用库级锁(相当于表级锁)来保证线程安全。 Mo原创 2016-01-26 14:11:54 · 1371 阅读 · 0 评论 -
打造先进的内存KV数据库-3 最终选择-C & B-Tree
多种索引与语言我尝试了tire树索引 B+树索引 B树索引,发现还是B树索引最快,另外使用C写了完善的B树索引,但是我发现使用cgo调用的时候,会有500%左右的性能损失,tire树大概比B树慢2倍,所以还是选择使用原生C来写完后续的进程。索引代码实现//BTree.h//实现对order序(阶)的B-TREE结构基本操作的封装。//查找:search,插入:insert,删除:remove。原创 2015-12-27 00:11:46 · 1695 阅读 · 0 评论 -
打造先进的内存KV数据库-4 伙伴内存管理系统
伙伴算法大概是这样的,monkey储存引擎(今年猴年了嘛~取个名字,重了再换)的内存管理使用伙伴算法,大概原理是这样的: 1.多个空闲内存块的链表,分别是不同大小的内存块,1K,2K,4K,8K,…,,按照这样的情况一直到4M,当程序申请内存时,选择一个稍大于其所要申请的块,比如申请1023字节,给1K,1024字节也给1K(为什么呢– 后文会讲),2056字节给4K。 2.如果要给的内存块没有原创 2016-01-04 19:34:33 · 1462 阅读 · 0 评论 -
Sapphire算法:GC Without Stop the World(上)
Go的GC一致为人诟病,然而Go1.5据说大大优化了GC,具体可以见这篇文章http://www.oschina.net/translate/go-gc-solving-the-latency-problem-in-go-1-5于是我打开了Go源代码,查看了Go GC相关代码,注释中说,Go现在使用的GC是一种不用停止世界的GC,基于Richard大师2001年的论文,我便翻译了这篇paper翻译 2016-03-02 14:18:02 · 1844 阅读 · 1 评论 -
内存映射系统开发
为了使用内存作为数据库的主要存储方式,开发内存数据库,我们需要对内存中的数据进行保证。即可以备份与还原,那么为了将内存中的数据备份到外存中,我们可以采取以下策略:选取一个外存文件,将其映射到某个内存地址;当更新内存时,适时地更新外存文件;系统重启时,从外存中重新读取内存内容。那么这里就有几个问题,首先是映射问题,起初我尝试了win32api: createFileMapp原创 2016-03-18 14:55:47 · 970 阅读 · 0 评论 -
Golang1.7 Goroutine源码分析
一、 Golang简介1.1概述 Golang语言是Google公司开发的新一代编程语言,简称Go语言,Go 是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有弹性的模块化程序。 Go 编译到机器码非常快速,同时具有便利的垃圾回收和强大的运行时反射。而他最广为人知的特性便是语言层面上对多核编程的支持,他有简单的关键字go来原创 2016-06-29 16:29:07 · 4492 阅读 · 3 评论 -
匹配队列问题
匹配队列问题最近在做视频聊天平台,想让他支持随机配对,做一个匹配队列。要求每个客户端到达后加入队列,匹配时随机找到 匹配目标。并且能够实现,广播所有人正在匹配的人数,在客户端离开后,也能及时清除垃圾。最初的设想–无头苍蝇乱撞最初的设计方案,采用每个客户端一个线程,同时每个客户端连接的时候,进入队列,客户端匹配的时候,更改状态 为正在匹配,并在队列中搜寻目标。如果搜寻到了目标,先试图获得自己的锁,原创 2016-10-18 22:15:22 · 2396 阅读 · 0 评论 -
Sapphire 算法简要分析
序几个月前为了分析goroutine的垃圾回收去看了Sapphire算法的论文,在博客里面也贴了第一部分的译文, 不过太监了,对此表示遗憾。于是将该篇论文重新看了一遍,然后整理了一下大致思路。个人理解,水平有限 ,可能有误还望大家批评指教!概述支持并发的语言(多线程等)的垃圾回收工作尤为复杂,大多语言采用了以标记-回收算法为主的回收机制, 然而在并发的环境下,在进行标记回收的过程中,应用程序新原创 2016-11-18 23:35:42 · 2113 阅读 · 0 评论 -
Go语言中的多核调度
Go语言中的多核调度浙江大学 14级软件工程 李自乐 近年来,随着工业技术的发展,服务器的CPU数量越来越多,动辄几十核心。为了发挥多核的优势,大多数程序都会采用多线程的方式来利用多核。另外,服务器编程一般都涉及较多的IO,包括网络或者外存,同步阻塞的IO对于大多数应用环境是一种很糟糕的方法:Fd.Read();这种语句一般在文件读准备完成之后会返回,但是文件的读取(这里的文件原创 2017-01-05 03:16:32 · 5349 阅读 · 1 评论 -
TensorFlow模型保存的一个坑
最近工作需要,使用tensorflow(r1.3)中contrib的某个库,根据tf官网的说法,go版本是只能调用py版本训练好的模型,而个人对go比较熟且线上环境用go作服务,所以想用go调python训练好的模型。使用python import tf和tf.contrib相关库,使用tf.saved_model.builder.SavedModelBuilder保存模型,但使用go使用LoadS原创 2017-11-23 17:10:48 · 2789 阅读 · 0 评论 -
打造先进的内存KV数据库-1 B树索引的建立(1)
设计目的在搜索引擎的设计中,往往需要使用倒排索引,在当前内存价格不断走低的情况下,内存数据库必然会成为主流。KV数据库由于适合Map-Reduce用于分布式处理。 本系统设计实现如下目标: * 实现极高性能的查询 * 实现分布式集群储存 * 实现可靠的日志系统索引设计索引采用B数索引,这样做的目的是大大利用CPU的缓存,让每个节点的大小与CPU二级缓存相匹配,另外,将索引值连续储存在节点中,原创 2015-12-18 15:17:08 · 2260 阅读 · 0 评论 -
CPU L2缓存初探
CPU L2缓存初探探索目的为了设计高性能的内存数据库,往往要考虑CPU缓存的命中率,查阅资料发现,Intel架构的处理器有3级缓存的设置,其中L1,L2较小,L3较大但被三个核心所公用。在我使用的i7 4712mq中,使用dmidecode查看缓存大小:inszva@inszva-Aspire-E5-572G:~$ sudo dmidecode[sudo] password for inszva原创 2015-12-17 14:38:36 · 2966 阅读 · 2 评论 -
nodejs-初探-简单的判定位置是否在市区API
看来nodejs还是越来越火了,WordPress也用上了nodejs抛弃了php,虽然php7比php5的效率高了一倍,然而在node,java等静态语言面前,还是不值一提.当然php还是有他的好处,开发迅速,修改便捷,适宜于调用api做应用层.另外由于node的封装性较低,node可以操作很多较为低级的操作,做路由,代理,解析头是相当方便,再加他不错的执行效率,我觉得用node做一些计算密集和原创 2015-11-27 22:30:48 · 1187 阅读 · 0 评论 -
对浙大工高班选拔面试一组题的常试性思路
是一道给Scotland Yard写AI的题目:原创 2015-04-09 17:23:37 · 3716 阅读 · 0 评论 -
迷宫寻路问题探索
这学期的《程序设计专题》看来不是太水,给的项目是写一个迷宫寻路算法,也不知对不对,第一节课下去就给搞了一个。#include #include #include int map[20][20];//1-permit 0-not int n, m;struct point{int x, y;bool d1, d2, d3, d4;};using names原创 2015-03-11 17:44:28 · 942 阅读 · 0 评论 -
ZOJ-2316-鄙视浙大的OJ
以前一直都是在POJ上面刷,今年要报ACM ICPC只好在自己学校的OJ上面刷,2316这道题真坑,最开始线性代数上面aij指的是第i行j列的元素,这道题居然是第j行i列,出题者你学过线代吗?害我笔算程序算,算好多遍都和sample output不一样!然后就是该死的格式,什么叫输出块之间空一行,最开始第一行空了,WA,后来又WA,原来最后一行也不能空,我去,从没见过这么严格的OJ,而且这东西有什原创 2015-03-10 22:56:09 · 2282 阅读 · 2 评论 -
scheme编译器-预处理器(二)多态性的宏
之前的代码有稍许错误进行了修改,另:加入了对scheme宏的完全支持:只改动了InitSyntax函数:bool WordReader::InitSyntax(){ std::string in; std::string pre; std::string name; syntax syntax_; SyntaxMap.clear(); if (str.empty())re原创 2015-04-09 22:27:30 · 828 阅读 · 0 评论 -
正整数的加法分解
比如6=1+5 6=2+4 6=3+3 6=1+1+4 ...直接上代码:(因为课是C语言课,就不用c++了,栈写起来麻烦,直接用数组换了)#include #include #define MAXSTACK 100unsigned int string[MAXSTACK] = { 0 };unsigned int pos = 0;//NEXT POSITIONunsi原创 2015-03-15 18:42:37 · 2193 阅读 · 0 评论 -
Scheme 编译器--预处理器制作 (一) 去掉注释 及 实现单宏
预处理器做了一半大概 把;单行注释 和#! !#多行注释 在ClearRemark中实现然后在PreProduce中处理宏,由于scheme的宏支持多态,和递归,我暂时只做了单宏宏储存在map中,内容是一个结构 中一个链表作为 参数的链表好了代码如下 ,有部分注释:WordReader.h:#include #include #include #include原创 2015-04-08 20:34:33 · 1113 阅读 · 1 评论 -
链表实现多项式的加法和乘法
基本思路是做一个链表,然后给个add函数,add函数用于相加,同时也可以用来插入新元素,相乘即系数相乘,次数相加add到新的链表即可:LinkList.h:#include #define TYPE1 int#define TYPE2 intstruct _lnode{TYPE1 data1;TYPE2 data2;struct _lnode * next;原创 2015-04-08 15:49:49 · 1014 阅读 · 0 评论 -
编译原理-DFA有穷自动机 词法分析应用于O(n)的单词匹配
有穷自动机DFA就是一个流程表,其中一些流程为接受态,接受态是可以作为一个此法分析终止的状态,如下图即是这次的DFA:原谅我的画图工具很low~~,好了贴代码,由二维数组作为DFA,每个元素的值为下一个状态的编号,查询的时间复杂度为O(n),远低于普通算法的O(n^2);/*main.cpp用词法分析器搜索单词在文中出现次数By 李自乐*/#include #inc原创 2015-03-28 21:45:22 · 2245 阅读 · 0 评论 -
想写一个游戏引擎了
一直在用HGE总觉得各种不便,没有Scene的概念,切换繁琐,music只支持w3t什么的根本找不到素材,还不支持中文显示,学一下DDraw,自己争取做一个!原创 2015-03-18 20:52:10 · 718 阅读 · 0 评论 -
ZOJ-2339 哈夫曼树 优先队列
以前用哈夫曼树做过物品编码与光电识别的课,对哈夫曼编码自然熟悉,这道题是给你文章中字符种数,及对应频数,叫你计算哈夫曼编码后,文章还有多长。注意到最终求值为叶节点的层数乘以叶节点使用次数的求和,又由于叶节点使用次数即频数,那么在每次合并节点的时候,都给ans加上新节点的频数,即可得到最终答案:#include #include #include using namespace std;原创 2015-04-20 21:12:42 · 1138 阅读 · 0 评论 -
迷宫 GDI 展示 及 读取位图获取信息
迷宫寻路工具:Visual Studio 2013 平台:Win32由于是C语言课,我就不适用MFC,DDraw等C++实现的框架了,直接用WindowsAPI,GDI进行,并且这个小程序用DDraw未免有点大财小用,DDraw留着以后学做游戏引擎。新建Win32 Application,根据需求更改字符表资源: 添加用于读取图片迷宫和自定义迷宫的菜单资源:ID分别原创 2015-03-21 15:45:51 · 1176 阅读 · 0 评论 -
Tensorflow-Go的扩展
谷歌的tensorflow虽然提供了go版本,但是官方的说法是: TensorFlow provides APIs for use in Go programs. These APIs are particularly well-suited to loading models created in Python and executing them within a Go applicatio原创 2017-12-07 17:44:59 · 1289 阅读 · 0 评论