自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (5)
  • 收藏
  • 关注

原创 走进强化学习

一、什么是强化学习强化学习是机器学习里面的一个分支,是一个智能体通过不断的与环境产生互动而不断改进它的行为,从而积累最大奖励的一个决策过程。 智能体在完成某项任务时,首先通过动作A与周围环境进行交互,在动作A和环境的作用下,智能体会产生新的状态,同时环境会给出一个立即回报。如此循环下去,智能体与环境进行不断地交互从而产生很多数据。强化学习算法利用产生的数据修改自身的动作策略,再与环境交互,产生新的...

2018-02-28 09:59:00 1079

原创 一个支持memcache协议的支持在线批量更新的kv数据库(适用于推荐引擎)

简介terminal是一个支持memcache协议的key-value数据库, 可以在线挂载多个静态数据存储, 很适合用于推荐引擎存储离线计算的候选集及非实时更新的大批量数据。 它不支持写操作, 只能用于进行静态数据存储, 但是它可以批量的动态载入线下生成的数据文件,这样可以减少更新大批量数据写入对系统造成的影响, 最大程度的降低写放大对磁盘的损耗。 terminal结合使用内存和硬盘, 内存

2017-06-07 21:44:44 760

原创 xgboost使用小结

简介xgboost的全称是eXtreme Gradient Boosting。正如其名,它是Gradient Boosting Machine的一个c++实现,作者为正在华盛顿大学研究机器学习的大牛陈天奇。他在研究中深感自己受制于现有库的计算速度和精度,因此在一年前开始着手搭建xgboost项目,并在去年夏天逐渐成型。xgboost最大的特点在于,它能够自动利用CPU的多线程进行并行,同时

2017-05-11 23:03:34 12348 7

原创 如何将自己的Python代码打包发布到pypi上

什么是pypi简单的说pypi是一个python包的仓库,里面有很多别人写好的python库,你可以通过easy_install或者pip进行安装,方便用户更方面的使用你的代码模块。将代码打包并上传到pypi上,大体上分为以下几步:1、整理代码的目录结构,方便打包和python的import,为了方便引用,需要将代码模块变成一个包,所以需要将功能代码用目录来整合方便

2017-02-23 23:10:44 15599 2

原创 Android如何离线播放加密(HLS)m3u8视频——实现HLS缓存

HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资

2016-12-28 19:25:39 27179 8

原创 Mac如何开启ssh服务

mac 无法ssh localhost,错误提示:bash: /usr/local/bin/ssh_session: Permission denied 在网上找了很久也没有找到解决方案,最后根据提示自己摸索如下:1.编辑/etc/sshd_config文件,注释掉#ForceCommand /usr/local/bin/ssh_session2.启动sshd服务:su

2016-12-28 16:29:37 11776 1

原创 sqlite3加密方案sqlcipher,及sqlcipher使用指南

sqlite是一款开源的轻量级数据库,现在android和ios都在使用它来存储结构化数据,但是加密版的并非开源。折中一下只能找开源的解决方案,sqlcipher是一个不错的选择,它可以对sqlite实现加密,并且有在android和ios都有相应的库进行解密读取,只是引入的库会增加app的大小。SQLCipher is an open source library that provides transparent, secure 256-bit AES encryption of SQLite data

2015-01-20 11:00:11 9981

原创 旋转数组求最小值

这是letcode上的一道题目 Leetcode: Find Minimum in Rotated Sorted Array一、什么是旋转数组呢,就是一个有序的数组,在从某一个位置开始,旋转到数组的另一端,例如:0 1 2 3 4 5 6 -> 4 5 6 0 1 2 3二、使用暴力的方式就是遍历这个数组,算法的复杂度就是O(N),但是根据一般的经验提到有序,就会考虑到使用二分将算法的复杂度降低到O(logn),当然这个题目也不例外,但是如何利用二分去求解呢,毕竟不是全部有序。

2014-10-29 17:34:27 1089

原创 如何保存指针地址 理解指针的指针

有这样一个问题就是如何使用一个整数保存一个结构体或类以及其他类型的指针,这种需求在不同语言之间调用是存在的,例如有一个结构体A:struct A{ char item1; int item2}; 需要使用一个整数b,需要用b保存这个结构体指针的地址(struct A* a = new A),使得b的值就是a的指向的地址,你可能会想直接b = a就可以了,但是编译器都不会答应。因为类型不同,一个是整数一个是指向struct A的指针。

2014-10-29 16:03:06 6279

原创 Linux段管理,BSS段,data段,.rodata段,text段

最近在解决一个编译问题时,一直在考虑一个问题,那就是Linux下可执行程序运行时内存是什么状态,是按照什么方式分配内存并运行的。查看了一下资料,就此总结一下,众所周知,linux下内存管理是通过虚存管理的,在分配内存是并非在物理内存开辟了一段空间,而是在使用时才分配的,而且是通过段页式管理。以上比较废话,开始看看程序运行时内存会是什么状态。

2014-10-28 12:23:46 15464 1

原创 Linux下Gcc 的编译过程

在linux下开发难免会用到gcc编译,GCC(GNU Compiler Collection,GNU编译器套装),是由 GNU 开发的编程语言编译器。它是GNU编译器套装以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。使用GCC编译程序时,编译过程可以被细分为四个阶段:◆ 预处理(Pre-Processing)◆ 编译(Compiling)◆ 汇编(Assembling)◆ 链接(Linking)

2014-10-27 13:50:15 1964

原创 堆排序实现及应用

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

2014-09-30 18:02:44 1381

原创 X的N次方求解——pow(x,n)实现

最近看到这样的一个题目求X的N次方,自己想了一些解决办法,记录一下留作日后参考

2014-09-29 16:34:51 15943 1

原创 排序算法总结

排序算法算是比较基本的算法,同时也是最重要的算法,涉及到的知识也比较多,下面记录一下各种排序算法的实现,包括插入排序,选择排序,快速排序,归并排序,冒泡排序等常见的排序算法:

2014-09-29 13:44:14 869

转载 二叉树遍历

二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来模拟实现(递归也是用栈实现的)。下面先简要介绍三种遍历方式的递归实现,再详细介绍三种遍历方式的非递归实现。

2014-09-24 15:57:24 669

原创 如何建立英文字符的哈希表

经常会遇到需要建立字符串哈希表的问题,例如strtok,或者删除指定字符串的中一些字符等等,可见的字符有256个,那么很容易想到建立一个哈希表,但是其中有一些技巧,可以节省空间,其实可以使用bitmap的形式实现,但是c语言中没有现成的东西,所以需要自己实现

2014-09-24 14:32:10 1518

转载 如何量化评价搜索引擎的结果质量

前言搜索质量评估是搜索技术研究的基础性工作,也是核心工作之一。评价(Metrics)在搜索技术研发中扮演着重要角色,以至于任何一种新方法与他们的评价方式是融为一体的。搜索引擎结果的好坏与否,体现在业界所称的在相关性(Relevance)上。相关性的定义包括狭义和广义两方面,狭义的解释是:检索结果和用户查询的相关程度。而从广义的层面,相关性可以理解为为用户查询的综合满意度。直观的来看

2014-08-26 15:01:43 2115

原创 搜索之BM25和BM25F模型

文章主要介绍搜索引擎文本相关性计算使用的BM25,BM25F模型,以及相关的知识点和理论基础

2014-08-25 19:33:15 20112

转载 C语言函数sscanf()的用法

在我的学习过程中,从文件读取数据是一件很麻烦的事,所幸有sscanf()函数。  C语言函数sscanf()的用法sscanf() - 从一个字符串中读进与指定格式相符的数据.  函数原型:  int sscanf( string str, string fmt, mixed var1, mixed var2 ... );  int scanf( const c

2014-08-20 10:37:04 960

原创 平方根(sqrt)算法

最近听说开平方算法挺难写,自己思考一下确实这些库函数只是一直在用,但是很少去思考如何实现的,sqrt在排序中使用频率非常的高,所以就研究了一下。大概有三种实现方式。一、用二分的方法        每次用中间数就试,如果大就到左区间选取中间数试,如果小就到右区间找中间数试,采用不断逼近的方式计算平方根,这种方式迭代次数有点多,且每次试验都要进行运算,效率不是很高,但是思路简单,巧妙的运用了二

2014-07-22 18:16:05 10303

原创 最小编辑距离(Minimum edit distance)

最小编辑距离是计算欧式距离的一种方法,可以被用于计算文本的相似性以及用于文本纠错,因为这个概念是俄罗斯科学家 Vladimir Levenshtein 在1965年提出来的,所以编辑距离又称为Levenshtein距离。

2014-06-16 22:28:45 2023

转载 fastcgi_param 详解(fastcgi能够获取到的参数)

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;#脚本文件请求的路径  fastcgi_param  QUERY_STRING       $query_string; #请求的参数;如?app=123  fastcgi_param  REQUEST_METHOD     $request_metho

2014-06-12 10:06:16 4157

原创 shared_ptr(共享指针)使用总结

背景介绍        最近在coding的时候遇到这样的问题,一个两层的map,hashmap>,重新加载时需要将这个map释放,但是这个map使用时是分为两段使用,一段是在hashmap中取出里面的map,第二段是在里层的map中查找key,这在多线程运行时有可能出现在取出里层map的引用后,重新加载数据并且释放掉现在的hashmap,这个场景引起了我对shared_ptr共享指针的关

2014-04-15 12:33:31 22923

原创 github应用小记(LINUX)

github是一个分布式的项目托管站点,方便项目的管理,最近一些代码放在自己的机器上感觉不安全,架设一个svn又太繁琐,所以选择使用github。在linux上使用github有以下步骤:1、申请账号,创建project.git项目2、在linux上安装gityum install git3、生成github使用的秘钥对ssh-keygen -t rsa -C "you

2014-03-07 00:05:29 1783

原创 求数组连续最大和

面试的时候已经不是第一次遇到这个问题,该问题的解法也非常的多,穷举,分治,DP,扫描,复杂度也不尽相同,可以说题目很小,但是蕴含的技巧和算法知识却很多。题目大致如下:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组

2013-12-03 10:59:27 2154

原创 word2vec实践及对关键词聚类

在搜索领域query的处理变得越来越重要,其中分类就是很重要的一环,对query分类是比较难的工程,因为query普遍较短,含有的信息(熵)很少,所以很难进行分类,普遍的方法是对query进行扩展,例如抓取搜索引擎的结果,或是直接将query扩展到对应的doc,然后对doc进行分类,对doc分类就变得容易了,而且准确率比较高,最近看到word2vec很火,使用的是无监督的机器学习,也就是不需要标注

2013-11-22 17:58:46 11181

原创 simhash(局部敏感哈希)的原理及应用

simhash广泛的用于搜索领域中,也许在面试时你会经常遇到这样的问题,如果对抓取的网页进行排重,如何对搜索结果进行排重等等。随着信息膨胀时代的来临,算法也在不断的精进,相似算法同样在不断的发展,接触过lucene的同学想必都会了解相似夹角的概念,那就是一种相似算法,通过计算两个向量的余弦值来判断两个向量的相似性,但这种方式需要两两进行计算向量的余弦夹角,计算量比较大,不能用于实时计算或是大数据量

2013-11-20 13:55:45 7065

原创 数组中超过N分之一的数字

寻找数组中超过一半的元素,这是一道十分经典和普遍的面试题了,实现起来比较容易,只是需要写技巧,将问题扩展就可以衍生到求数组中错过N分一的元素。/************************************************************************* > File Name: morethanharf.c > Auth

2013-11-01 17:53:02 2797

原创 折半查找(二分搜索)的应用和技巧全面总结

折半查找应该算是算法中比较简单常见,但却很实用的方法之一了,又叫做二分搜索,其应用比较广泛,可以用于排序数组中元素的查找,复杂度仅为log(N),也可以用于有序数组中插入元素等等,一般而言针对排序数组的一些算法都会活多或少的用到折半查找活折半查找的思想,折半查找的实现主要分为两种方式,一种是遍历非递归形式,一种是采用递归的形式。1、非递归形式,这种实现主要是通过每次调整中点的位置来实现。

2013-10-28 17:39:59 3344

原创 求k个数组包含每个数组至少一个元素的最小范围(待字闺中,备忘)

有k个有序的数组,请找到一个最小的数字范围。使得这k个有序数组中,每个数组都至少有一个数字在该范围中。例如:1: 4, 10, 15, 24, 262: 0, 9, 12, 203: 5, 18, 22, 30所得最小范围为[20,24],其中,20在2中,22在3中,24在1中。这是待字闺中的一道面试题,就个人经

2013-10-23 15:47:16 3506 1

原创 Bloom Filter原理及使用

有过搜索经验的同学们都知道,当进行网页抓取的时候都会遇到url排重的问题,当然这也是面试经常遇到的问题,同学们可能会想到很多的方法去解决这个问题,比如用数据库,kv系统,bitmap等等,但是都由于种种问题不能完全的解决掉排重的问题,数据库在大数据量和高访问量的时候往往会不尽人意,kv库会很耗内存,bitmap会出现很高的冲突率,这时候bloomfilter就成为了很好的选择,一方面是基于内存的具

2013-10-18 13:35:17 3378

转载 《机器学习实战》作者Peter Harrington:如何成为一位数据科学家(图灵访谈)

作者简介:Peter Harrington,拥有电气工程学士和硕士学位,他曾经在美国加州和中国的英特尔公司工作7年。Peter拥有5项美国专利,在三种学术期刊上发表过文章。他现任HG Data首席科学家。如果说LinedIn跟踪的是人和人之间的商务往来,HG Data则是致力于挖掘公司间的商业往来。他曾是Zillabyte公司的创始人和首席科学家,在此之前,他曾担任2年的机器学习软件顾问。Pe

2013-09-30 10:18:59 2579

原创 最长回文串算法

给定一个字符串找出最长回文字符串范围,例如abaabac,最长回文为abaaba1、使用暴力的算法需要O(N^3)的复杂度,需要O(N^2)的复杂度去运算字符串所用的子串,然后使用O(N)去判断是否是回文串,从而定位最长的回文子串。2、使用动态规划的思想进行求解,思路是利用子串从短到长进行逐步的动态规划求解,然后从短向长蔓延进行计算:当i == j 时 肯定是长度为1 的回文串,dp[

2013-09-30 10:08:15 5492

转载 volatile关键字作用

volatile关键字  volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下:int volatile nVint;  当要求使用volatile 声明的变量的值的时候,

2013-08-27 09:30:22 704

原创 查找单链表的中点

给定一个单链表如何高效的找到链表的中点,要求算法复杂度O(N),如果读者遇到过这样的问题,那么这个问题就迎刃而解了,验证链表是否有环的问题,使用快慢指针变量链表,同理中点问题也可以使用快慢指针实现,慢指针一次移动一个节点,快节点一次移动两个节点,快指针到达终点时,慢指针指向中点。LinkNode *FindMid(LinkNode *p){ if(p == NULL){

2013-08-07 09:26:17 5396

原创 强制转换和数组下标的妙用

前两天看到一篇文章是些如何不用+做加法的算法,其中有人提到可以这样实现:int add(int a,int b){ char * c; c = (char *) a; return (int)&c[b];}理解了半天,现在做一下记录,防止自己忘记将一个整形强制转化为指针,其实指针的指向的地址就是该整数的值,例如a是10的话那么c指向的地址就是0xa,使用数组下标其

2013-07-28 10:11:07 970

原创 硬币找零问题(动态规划求解)

如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元? (表面上这道题可以用贪心算法,但贪心算法无法保证可以求出解,比如1元换成2元的时候)首先我们思考一个问题,如何用最少的硬币凑够i元(i好了,让我们从最小的i开始吧。当i=0,即我们需要多少个硬币来凑够0元。 由于1,3,5都大于0,即没有比0小的币值,因此凑够0元我们最少需要0个硬币。 (这个分析很傻是不是

2013-07-26 22:10:17 19461 5

原创 数字二进制中1的个数

给定一个数字求该数字二进制中1的个数被广泛应用于simhash中,求两个hash值得相似程度可以先将两个hash值做异或操作,然后统计异或结果二进制中1的个数来判断两个hash值得相似性。    言归正传,求数字二进制中1的位数最直观的解法为所求数字不断的向右移位>>直到为0,统计移位过程中最低位是否是1,这样需要移位32~64位,代码如下:int bitcout1(uint32_t nu

2013-07-25 10:32:39 1046

原创 HBase相关开发小结

HBase使用总结1、  使用压缩存储HBase用于大规模的数据管理,数据一般会达到TB级,量级一般会达到billion级,如果不采用压缩模式管理数据会大大的增加HDFS的存储及NameNode的管理压力,LZO压缩是HDFS支持的压缩格式,可以将数据压缩到50%左右,并且压缩和解压速度相比zip等模式要快。在HBase使用LZO压缩前需要做以下准备:1、  安装lzo-2.04-1.

2013-07-25 09:39:55 2968

转载 动态规划:从新手到专家(转载)

前言本文翻译自TopCoder上的一篇文章: Dynamic Programming: From novice to advanced ,并非严格逐字逐句翻译,其中加入了自己的一些理解。水平有限,还望指摘。前言_我们遇到的问题中,有很大一部分可以用动态规划(简称DP)来解。 解决这类问题可以很大地提升你的能力与技巧,我会试着帮助你理解如何使用DP来解题。 这篇文章是基于实例

2013-07-24 17:59:45 872

Blogo ——Mac Wordpress博客编辑器

Blogo是一款离线写博客软件,目前只支持 wordpress 博客程序

2016-12-28

SQLCipher+for+Android+v3.1.0

SQLCipher for Android v3.1.0 不需要编译

2015-01-20

Quake3源代码

UAKE的开发商ID SOFTWARE 遵守GPL协议,公开了QUAKE-III的原代码,让世人有幸目睹Carmack传奇的3D引擎的原码。

2014-07-22

中科院分词器ICTCLAS,编译版(64bit)

中科院分词器ICTCLAS,已经实现了二进制程序,有相关的代码,运行比较简单,执行wordseg infile outfile就可以,可以用于对word2vec需要的语料进行分词

2013-11-22

google谷歌发布基于B-Tree 的C++ 模板库cpp-btree-1.0.1.tar.gz

谷歌开源团队近日发布了C++ B-Tree,这是一个C++模板库,实现了基于B-tree数据结构的有序内存容器。类似于STL的map、set、multimap和multiset模板,C++ B-tree也提供了btree_map、btree_set、btree_multimap和btree_multiset等模板。 B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。这个数据结构一般用于数据库的索引,综合效率较高。 由于B-trees可以保持磁盘寻道到最低限度,通常作为二次存储数据结构。对于内存中数据结构来说,将缓存未命中率保持在最低限度,可以产生更高的性能。C++ B-tree在搜索树时,通过在每个节点执行多个键比较,更好地利用了缓存。缓存行为的改善,可以使访问大型容器时的性能有显著提升。 谷歌开源团队同时也表示,C++ B-tree容器也不是没有缺点,与标准STL容器不同的是,修改C++ B-tree容器,会令所有未在该容器中的迭代器失效。出于这个原因,谷歌在该库中还增加了一个“安全”容器版本,安全容器中的迭代器会保存当前key的副本,并会在使用迭代器时自动复位。

2013-04-13

空空如也

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

TA关注的人

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