随笔分类 - [41]Algorithm算法
-
防止表单重复提交的几种策略
摘要:防止表单重复提交的几种策略表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如:点击提交按钮两次。点击刷新按钮。使用浏览器后退按钮重复之前的操作,导致重复提交表单。使用浏览器历史记录重复提交表单。浏览器重复的HTTP请求。几种防止表单重复提交的方法 禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。 我之前的文章曾说过用一些Jquery插件效果不错。 Post/Redirect/Get模式。在提交后执行... 阅读全文
-
随机森林中的数学基础之大数定律
摘要:随机森林中的数学基础之大数定律摘要:随机森林与决策树的一个显著的不同点就是它不会产生过度拟合。它的理论依据就是大数定律。很熟悉的一个名词:大数定律,记得本科的概率论就有学,忘了差不多了,下面先复习下。大量试验说明,随机事件A的频率R(A),当重复试验的次数n增大时,总呈现出稳定性,稳定在某一个常数的附件,意指数量越多,其平均值就越趋近与期望值。一:大数定律回顾切比雪夫定理:设 a1,a2,a3,…,an 为相互独立的随机变量,其数学期望为:E(ai)=, 及方差D(ai)=则序列收敛于u,即在定理条件下,当n无限变大时,n个随机变量的算术平均将趋于一个常数。辛钦定理(切比雪夫的特殊情况):设a 阅读全文
-
K-means Algorithm
摘要:K-means Algorithm在监督学习中,有标签信息协助机器学习同类样本之间存在的共性,在预测时只需判定给定样本与哪个类别的训练样本最相似即可。在非监督学习中,不再有标签信息的指导,遇到一维或二维数据的划分问题,人用肉眼就很容易完成,可机器就傻眼了,图(1)描述得很形象。但处理高维度的数据,人脑也无能为力了,最终还是得设计算法让机器来完成。如何将所有样本分成若干个类簇(cluster),并且每个类簇中的样本具有更高的相似度,这就是聚类分析算法的终极目标。这里以最经典的K-means算法为切入点进行说明。 K-means算法的目标是将m个样本组成的集合X={x(1),x(2),⋯,x(m) 阅读全文
-
LeetCode:Palindrome Partitioning
摘要:LeetCode:Palindrome Partitioning题目如下:(把一个字符串划分成几个回文子串,枚举所有可能的划分)Given a strings, partitionssuch that every substring of the partition is a palindrome.Return all possible palindrome partitioning ofs.For example, givens="aab",Return[ ["aa","b"], ["a","a&quo 阅读全文
-
时间测试
摘要:数据结构与算法系列(1)时间测试时间测试——.NET数据结构与算法系列之一追忆,2013年11月12日前言好久都把数据结构和算法的东西忘完了,最近想重温下这些知识。因此就写了> 阅读全文
-
(JavaScript插件——下拉菜单)
摘要:前言阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/3404867.html本文主要来学习一下JavaScript插件--下拉菜单。下拉菜单通过此插件可以为几乎所有东西添加下拉菜单,包括导航条、标签页、胶囊式按钮,本文主要来介绍下导航条里面的下拉菜单吧,其实道理都是一样的。用于导航条先来看一下之前做过的一个简单的导航条导航条分为四个部分。第一部分导航头,第二部分导航列,第三部分form查询表单,第四部分导航列。 Toggle navigation ... 阅读全文
-
随机森林介绍
摘要:随机森林介绍LevenYes渣渣小本求职复习之路每天一博客系列——Unix&Linux入门(2) 前情回顾:在上一篇,我们开始了Unix系统的一些了解,另外,还介绍了一些学习方法和小贴士,希望对自己和对大家都有帮助。 将近一个月前,决定一天写一篇博客,坚持三十天。说实在的,到现在应该是到尾声了吧,回想起之前的大半个月,有点难以想象,没想到自己还真的能坚持下来。 本来写博客的目的是为了复习,为了更好地找工作,从我这一系列的标题就可以看出来。可是写到这个地步,主要的原因已经不是因为那些东西了,更多的是自己写得开心,在这个过程中享受到了乐趣和取得了成就感。特别谢谢那些给我评论留言的朋友,没有 阅读全文
-
线性表
摘要:线性表学习笔记之链表原创博文,转载请注明出处链表分类:单链表,插入删除和查找的时间复杂度均为O(n) 双链表,插入、删除和查找的时间复杂度为O(1) 循环链表,表中最后一个节点的指针不是NULL,而改为指向头结点,从而整个链表形成一个环。 静态链表,借助数组来描述线性表的链式存储结构,这儿的指针是结点的相对地址。和顺序表一样需要预先分配一块连续的内存空间。以next==0作为其结束的标志。综合应用: 1.设计一个递归算法,删除不带头节点的单链表L中所有值为x的节点。 思路:可以设计一个函数f(L,x)删除以L为首结点指针的单链表中所有值为x的结... 阅读全文
-
LRU Cache
摘要:LeetCode:LRU Cache题目大意:设计一个用于LRU cache算法的数据结构。题目链接。关于LRU的基本知识可参考here分析:为了保持cache的性能,使查找,插入,删除都有较高的性能,我们使用双向链表(std::list)和哈希表(std::unordered_map)作为cache的数据结构,因为:双向链表插入删除效率高(单向链表插入和删除时,还要查找节点的前节点)哈希表保存每个节点的地址,可以基本保证在O(1)时间内查找节点具体实现细节:越靠近链表头部,表示节点上次访问距离现在时间最短,尾部的节点表示最近访问最少查询或者访问节点时,如果节点存在,把该节点交换到链表头部,同 阅读全文
-
Twitter算法
摘要:算法实践——Twitter算法面试题(积水问题)的线性时间解法问题描述:在下图里我们有不同高度的挡板。这个图片由一个整数数组所代表,数组中每个数是墙的高度。下图可以表示为数组(2、5、1、2、3、4、7、2)。假如开始下雨了,那么挡板之间的水坑能够装多少水(水足够多)呢?下图是装满水的情况,一个蓝色格子代表一个单位的水。下图中一共装了10个单位的水。问题分析:先看看下图,判断哪个单元格的水能留下来。下图中的两个单元格,一个红色的单元格和一个绿色的单元格,哪个单元格的水是溜走了,哪个单元格的水能留下来?很明显的,上图中的红色单元格的水会流走,绿色单元格的水会被留下来。那么,仔细看看这两个单元格的 阅读全文
-
重提基数排序
摘要:重提基数排序在此之前,我已尝试过两次基数排序的方法:LSD、MSD。我的主要改进点在于每次“申请”大块存储器,而不是采用最原始的链表。当然这种形式本质上还是链表,只是每个节点就是一个页面。在存储器申请/释放上,开始时一次申请/结束时一次释放,避免了一次一数字时的malloc/free调用的代价。但是,缺点还是存在的,主要在于不够缓存友好。看一下结果就很容易明白缓存友好的重要性了。主要数据结构:const __int32 TFSI = 1024*1024*500;const int PAGEAMOUNT = 4096;const int PAGEGRANULAR = PAGEAMOUNT/siz 阅读全文
-
查找树
摘要:《算法导论》学习记录目录查找树是一种支持包括查找、插入、找最小值、找出最大值、找出前趋、找出后继、删除动态集合操作的数据结构。基本操作的时间与树的高度成正比,对于一棵含有n个结点的完全二叉树,基本操作的最坏情况运行时间为Θ(lgn),对于含有n个结点的树(不是完全二叉树),最坏的情况(线性链)运行时间为Θ(n)。二叉查找树的性质:x为二叉查找树的一个结点,x_l 为x的左子树中的一个结点,那么x_l存储的关键字小于或者等于x存储的关键字;x_r为x的右子树中的一个结点,那么x_r存储的关键字大于或者等于x存储的关键字。如下图所示:二叉树可以用链表结构来表示,每个结点除了关键字和卫星数据外,还有 阅读全文
-
单链表中的环
摘要:[算法][LeetCode]Linked List Cycle & Linked List Cycle II——单链表中的环题目要求Linked List CycleGiven a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space?如何判断一个单链表中有环?Linked List Cycle IIGiven a linked list, return the node where the cycle begins. If there is 阅读全文
-
二维数组的二分查找
摘要:[算法][LeetCode]Search a 2D Matrix——二维数组的二分查找题目要求Write an efficient algorithm that searches for a value in anmxnmatrix. This matrix has the following properties:Integers in each row are sorted from left to right.The first integer of each row is greater than the last integer of the previous row.For exa 阅读全文
-
Pi
摘要:Math]Pi数学知识忘地太快,在博客记录一下pi的生成。100 Decimal places3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679Approximations22/7 3 decimal places (used by Egyptians around 1000BC)666/212 4 decimal places355/113 6 decimal places104348/33215 8 decimal placesSerie 阅读全文
-
搞定KMP匹配算法
摘要:KMP算法介绍及实现——轻松搞定KMP匹配算法本文介绍了字符串匹配算法中的BF算法和KMP算法。本文中KMP算法介绍部分是关于KMP算法相关文章中最简洁的一篇文章之一。下一篇将继续介绍Horspool算法和BM算法。现在我们用的大部分软件都含有查找/替换的功能,要完成查找替换功能就需要用到字符串匹配算法。字符串匹配的算法有很多,最著名的字符串匹配算法有:KMP算法,Boyer-Moore(BM)算法。如果要我们自己去实现字符串匹配功能,我们会怎样去做呢?当然,我们最容易想到的方法就是人们常说的蛮力匹配法。术语:模式串:即你要查找或替换的字符串。源串/匹配串:你要从哪里查找或者替换哪里的字符串。 阅读全文
-
牛顿法(Newton's Method)
摘要:Newton's Method在求最优解时,前面很多地方都用梯度下降(Gradient Descent)的方法,但由于最优步长很难确定,可能会出现总是在最优解附近徘徊的情况,致使最优解的搜索过程很缓慢。牛顿法(Newton's Method)在最优解的搜索方面有了较大改进,它不仅利用了目标函数的一阶导数,还利用了搜索点处的二阶导数,使得搜索算法能更准确地指向最优解。我们结合下图所示的一个实例来描述牛顿法的思想。假设我们想要求得参数\theta,使得f(\theta)=0。算法的描述如下:随机猜测一个解\theta^{(0)},并令t=0;在\theta^{(t)}处用一根切线来 阅读全文
-
HashTable
摘要:算法打基础——HashTable这一节主要讲很多方面非常重要的hash table等问题. 由于平时很少用到这些,基本都忘了。。。怎样快速的在内存中插入、删除、和搜索呢? 这就需要哈希表了这一节主要知识点是:1 简单的映射表和处理冲突方法 2.哈希函数的选择 3.开放寻址法(高级解决冲突方案)1 简单的映射表和处理冲突方法哈希表希望解决的一个典型问题是编译器内部的符号表,它的结构是:每个记录有一个指针x指向这个记录,key[x]就是这个记录的关键字,然后后面就是一些具体数据。如果我们想方便得进行增删查操作,这些数据应该如何组织呢?最简单的方法:直接寻址表这个方法当键值得范围相对较小的时... 阅读全文
-
《算法导论》第十一章----散列表(直接寻址、链接法解决碰撞)
摘要:《算法导论》第十一章----散列表(直接寻址、链接法解决碰撞)《算法导论》学习记录目录散列表(哈希表)是根据关键字直接访问内存存储位置的数据结构,仅支持插入、查找、删除操作。在最坏情况下,查找一个元素的时间为Θ(n),而在一些合理的假设下,查找一个元素的期望时间为O(1)。散列表是普通数组的推广。对于普通数组: 1、我们可以将关键字为k的元素存到数组下标为k的位置里。 2、如果有一个关键字k,我们直接查看数组下标为k的位置。这种方式为直接寻址方式。但是这种方式有不足:只适用于关键字的全域比较小,而且没有两个元素的关键字完全相同。而显示中存储的关键字集合会比关键字的全域相对小很多。下... 阅读全文
-
skip list
摘要:skip list概述Skip list是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。并且是Redis、LevelDB、nessDB、SkipDB等的底层结构,学习skip list为后面学习levelDB打下基础。核心思想如果是一个简单的链表,如图1,那么我们知道在链表中查找一个元素I的话,需要将整个链表遍历一次。图 1如果是说链表是排序的,并且节点中还存储了指向前面第二个节点的指针的话,如图2,那么在查找一个节点时,仅仅需要遍历N/2个节点即可。图 2这基本上就是跳表的核心思想,其实也是 阅读全文