
算法和数据结构
深度Java
这个作者很懒,什么都没留下…
展开
-
Bruce Schneier 和他的密码学以及网络安全经典著作推荐
经典语录--数学是完美的,而现实却是主观的。数学是精确的,而计算机却充满矛盾。数学是遵循逻辑的,而人却是不稳定的、反复无常的,甚至是难以理解的。 密码学是数学的一个分支。像所有其他数学分支一样,它涉及的是数字、公式和逻辑。安全性,特别是在我们的生活中十分有用的安全性,它涉及的是人:人所知道的事情、人与人之间的关系、人和机器的关系。而数字的安全性涉及到的是计算机:复杂的、不稳定的、充满漏洞的计算机。原创 2012-02-10 10:58:27 · 7105 阅读 · 1 评论 -
JavaScript 中的有限状态机
http://www.ibm.com/developerworks/cn/web/wa-finitemach/ JavaScript 中的有限状态机Page navigation系列文章有限状态机很早就已用作设计和实现事件驱动的程序(比如网络适配器和编译器)内复杂行为的组织原则。现在,可编程的 Web 浏览器为新一代的应用程序开辟了一种全新的事件驱动环境。基于浏览器的应用程序因 Ajax 而广为流转载 2012-02-20 16:13:33 · 3565 阅读 · 1 评论 -
用递归法计算斐波那契数列的第n项
斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了《斐波纳契数列》季刊,专门刊载这方面的研究成果原创 2012-03-12 14:56:23 · 40107 阅读 · 2 评论 -
海量数据处理
1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。s 遍历转载 2012-03-23 10:00:18 · 4354 阅读 · 2 评论 -
一笔画问题【数据结构-图论】
回家路上听到2个人在说:田字怎么一笔写成,并且笔划不重复。田我回家想了许久,觉得无论如何走正常的途径肯定是不行的,投机取巧脑筋急转弯的我不讨论。那么是否可以找到数学定理?其实就是欧拉七桥问题:18世纪著名古典数学问题之一。在哥尼斯堡的一个公园里,有七座桥将普雷格尔河中两个岛及岛与河岸连接起来(如图)。问是否可能从这四块陆地中任一块出发,恰好通过每座桥一次,再回到起点?欧拉于1736年研究并解决了此原创 2012-11-28 15:11:10 · 17057 阅读 · 1 评论 -
红黑树
1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在转载 2012-11-28 16:08:30 · 11784 阅读 · 3 评论 -
深入浅出理解Paxos算法
Paxos算法是莱斯利·兰伯特(英语:Leslie Lamport,LaTeX中的「La」)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。Paxos算法一开始非常难以理解,但是一旦理解其实也并不难,之所以难理解其实是因为作者讲的故事难理解。Paxos算法维基百科https://en.wikipedia.org/wiki/Paxos_(computer_science)网上有2篇原创 2016-02-19 20:09:40 · 26557 阅读 · 4 评论 -
算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen
算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率...转载 2019-02-25 14:58:49 · 847 阅读 · 1 评论 -
Redis源码和java jdk源码中hashcode的不同实现
一.redis实际上是使用了siphash这个比较简单,我说的简单是指redis代码比较少不像jdk一样调用C++代码调用栈非常深。先看这个rehashing.c主要就是dictKeyHash函数,需要调用dict.h头文件中定义的dictGenHashFunction#include "redis.h"#include "dict.h"void _redisAssert(...原创 2019-03-22 19:49:26 · 2257 阅读 · 0 评论 -
为什么Java8中HashMap链表使用红黑树而不是AVL树
在Jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度。那么很多人就有疑问为什么是使用红黑树而不是AVL树,AVL树是完全平衡二叉树阿?最主要的一点是:在CurrentHashMap中是加锁了的,实际上是读写锁,如果写冲突就会等待,如果插入时间过长必然等待时间更长,而红黑树相对AVL树他的插入更快!第一个问...原创 2019-04-01 01:51:46 · 31708 阅读 · 5 评论 -
Linux内核的红黑树源码实现以及调用
红黑树可以说是程序员经常遇到的一种数据结构,不管是工作还是面试都会涉及,有时候还会让你写一段红黑树代码。本文主要是讲Linux中的红黑树,关于红黑树定义参考wiki:https://en.wikipedia.org/wiki/Red%E2%80%93black_tree其中《算法导论》中的定义最为清晰:红黑树图示:Linux中的红黑树(rbtree) 下面...原创 2019-04-28 19:33:02 · 7231 阅读 · 4 评论 -
经典算法书籍推荐以及算法书排行【算法四库全书】
经典算法书籍推荐以及算法书排行【算法四库全书】作者:霞落满天 https://linuxstyle.blog.youkuaiyun.com/ https://blog.youkuaiyun.com/21aspnet行文方式:类似《四库全书》截取经典算法书目录和精华篇章版权说明:本文于2019年5月5日首发于优快云,若有转载请务必保留版权,为了整理编排选择全文内容花费了2019年一个五一的时间。...原创 2019-05-05 20:14:35 · 34949 阅读 · 9 评论 -
NP问题
NP问题http://baike.baidu.com/view/158424.htmP(Polynomial,多项式)问题.P问题是可以在多项式时间内被确定机(通常意义的计算机)解决的问题.NP(Non-Deterministic Polynomial, 非确定多项式)问题,是指可以在多项式时间内被非确定机(它可以猜,他总是能猜到最能满足你需要的那种选择,如果你让他解决n皇后问题,他只要猜n次就能原创 2012-01-04 17:17:56 · 5297 阅读 · 0 评论 -
不畏浮云遮望眼--离散数学和组合数学
不畏浮云遮望眼,基础很重要! 离散数学是算法和数据结构的基础,而算法和数据结构又是什么的基础?不解释了。 1.《离散数学及其应用》作者: (美)Kenneth H. R出版社: 机械工业出版社出版年: 2007-6页数: 804定价: 79.00元丛书: 计算机科学丛书ISBN: 9787111203261 2.《组合数学》作者: (美)布鲁迪(Brualdi/R.A.)/冯舜玺等出版社: 机械原创 2011-12-28 16:44:18 · 4246 阅读 · 0 评论 -
希尔排序
希尔排序(shell)是对插入排序的一个改装,它每次排序把序列的元素按照某个增量分成几个子序列,对这几个子序列进行插入排序,然后不断的缩小增量扩大每个子序列的元素数量,直到增量为一的时候子序列就和原先的待排列序列一样了,此时只需要做少量的比较和移动就可以完成对序列的排序了.#include ;void Shell_Sort(int a[], int n) { int h,i原创 2007-03-20 01:10:00 · 7942 阅读 · 4 评论 -
“分布式哈希”和“一致性哈希”的概念与算法实现
分布式哈希和一致性哈希是分布式存储和p2p网络中说的比较多的两个概念了。介绍的论文很多,这里做一个入门性质的介绍。 分布式哈希(DHT) 两个key point:每个节点只维护一部分路由;每个节点只存储一部分数据。从而实现整个网络中的寻址和存储。DHT只是一个概念原创 2011-07-26 17:37:23 · 5002 阅读 · 4 评论 -
一致性哈希(Consistent Hashing)
大家做网站有两个极端。一个极端是都在往热门的走。比如视频网站风靡,于是涌现出了太多的视频网站;当年下载站流行,于是涌现太多下载站;网址站流行,涌现太多的网址站;百万格子流行,大家都做格子站。这样不好,因為绝大部分网站都是亏损的。 另外一个极端是都往冷门的走,比如发泄网,你发泄网靠原创 2010-07-29 19:51:00 · 5494 阅读 · 3 评论 -
中国身份证号码验证
using System;/// /// Summary description for IDCardValid/// public class IDCardValid{ public IDCardValid() { // // TODO: Add constructor logic here /原创 2009-05-17 12:07:00 · 11398 阅读 · 13 评论 -
Dynamo 以及一致性哈希简介
本介绍参考 Amazon 的 Dynamo 论文。需要更详细更准确信息的同学请直接阅读原文。(原文地址http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf)这篇论文本身没提出什么新原创 2010-07-29 16:09:00 · 6072 阅读 · 1 评论 -
C语言100个经典的算法
POJ上做做ACM的题语言的学习基础,100个经典的算法C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?______________________________________________原创 2007-03-24 17:00:00 · 147256 阅读 · 13 评论 -
二分查找法
二分查找算法的前置条件是,一个已经排序好的序列(在本篇文章中为了说明问题的方便,假设这个序列是升序排列的),这样在查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止.int BinSearch(SeqList * R, int n , KeyType原创 2007-03-24 12:54:00 · 8239 阅读 · 1 评论 -
快速排序
快速排序的算法思想: 选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分大于枢纽元素,再对这两个分割好的子序列进行上述的过程.// 对一个给定范围的子序列选定一个枢纽元素,执行完函数之后返回分割元素所在的位置,// 在分割元素之前的元素都小于枢纽元素,在它后面的元素都大于这个元素int Partition(int array[], int low, int原创 2007-03-24 12:48:00 · 4986 阅读 · 1 评论 -
已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。
已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。 答案:int max(int a,int b){return (a+b+abs(a-b))/2;} 类似的 请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句答案:#define MAX(a,b) (a b-fabs(a-b)/2)原创 2007-03-24 16:42:00 · 6440 阅读 · 3 评论 -
维基百科上的算法和数据结构链接很强大
突然发现维基百科上的算法和数据结构比百度百科强多啦,图文并茂。其实这个网站不错:http://www.sorting-algorithms.com冒泡排序:bubble冒泡的意思http://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F ---------------------------------------------原创 2012-01-13 18:32:19 · 6478 阅读 · 0 评论 -
冒泡排序
冒泡排序算法的思想:很简单,每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列从父前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了.因此,复杂度在最坏的情况下是O(N ^ 2).void Swap( int * a, int * b) { int temp; temp = * a原创 2007-03-19 19:27:00 · 5630 阅读 · 1 评论 -
选择排序
选择排序算法思想:第一次:选第2个数和第一个比较并把小的放左边,继续比较第3个和第一个,这样一圈下来最小的到第一位;第二次:选第3个数和第二个数比较如此直到最后一个数。 C语言版#include ;void Selectsort(int A[],int n) { int i,j,temp; for(i=0;i<n;i++) {原创 2012-01-17 18:33:07 · 2689 阅读 · 1 评论 -
插入排序
插入排序是最简单最直观的排序算法了,它的依据是:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止.算法的复杂度也是简单的,排序第一个需要1的复杂度,排序第二个需要2的复杂度,因此整个的复杂度就是1 + 2 + 3 + ... + N = O(N ^ 2)的复杂度. 直接插入排序(straight i原创 2007-03-24 12:49:00 · 7203 阅读 · 2 评论 -
一致性哈希算法以及其PHP实现
<br />一个好名字是成功的一半,我们希望好名子有如下标准:<br /> 第一:要容易记忆朗朗上口<br /> 第二:要标明网站的中心思想<br /> 第三:要健康而寓意丰富<br /> 针对以上三个方面的特点,我认为如果能站在以下五个方面给网站取名字会取得比原创 2010-08-01 14:26:00 · 17831 阅读 · 3 评论