摘要: 关于mongodb的好处,优点之类的这里就不说了,唯一要讲的一点就是mongodb中有三元素:数据库,集合,文档,其中“集合” 就是对应关系数据库中的“表”,“文档”对应“行”。 一: 下载 上MongoDB官网 ,我们发现有32bit和64bit,这个就要看你系统了,不过这里有两点注意: ①:根据 阅读全文
posted @ 2012-02-18 00:01 一线码农 阅读(436302) 评论(93) 推荐(107)
摘要: 今天写最后一篇来结束这个系列,我们知道很多算法解决问题的步骤都是固定的,而概率算法每一步的选择都是随机的,当在某些领域问题中通常比最优选择省时,所以就大大提高了算法的效率,降低了复杂度。一:思想 这里主要讲一下“数值概率算法”,该算法常用于解决数值计算问题,并且往往只能求得问题的近似解,同一个问题同样的概率算法求解两次可能得到的结果大不一样,不过没关系,这种“近似解”会随时间的增加而越接近问题的解。二:特征 现实生活中,有很多问题我们其实都得不到正确答案,只能得到近似解,比如“抛硬币”求出正面向上的概率,”抛骰子“出现1点的概率,再如:求“无理数π”的值,计算"“定积分”等等。针.. 阅读全文
posted @ 2012-02-14 00:57 一线码农 阅读(10801) 评论(4) 推荐(3)
摘要: 今天跟大家分享下算法思想中比较难的一种"动态规划",动态规划给人像是作战时常用的“迂回战术”,或者说是游击战,在运动中寻找突破口。一: 思想 首先要了解”动态规划“,必须先知道什么叫做”多阶段决策“,百科里面对这个问题解释的很全,我就load一段出来,大家得要好好品味,好好分析。上面图中最后一句话就定义了动态规划是要干什么的问题。二:使用规则 现在我们知道动态规划要解决啥问题了,那么什么情况下我们该使用动态规划呢? ① 最优化原理(最优子结构性质): 如果一个问题的最优策略它的子问题的策略也是最优的,则称该问题具有“最优子结构性质”。 ② 无后效性: 当一个问题被划分为多. 阅读全文
posted @ 2012-02-13 16:59 一线码农 阅读(9191) 评论(3) 推荐(3)
摘要: 记得广告中经常听到过,抱着试试看的态度买了3个疗程,效果不错........ 也经常听人说过什么车到山前必有路,船到桥头自然直。哈哈,这种思想就是回溯思想,也可称为试探思想。一: 思想 有时我们要得到问题的解,先从其中某一种情况进行试探,在试探过程中,一旦发现原来的选择是错误的,那么就退回一步重新选择, 然后继续向前试探,反复这样的过程直到求出问题的解。二:场景 回溯思想是一个非常重要的思想,应用场景也是非常广泛。 ① “下棋”: 每一次走棋的位置都要考虑到是否是损人利己,如果是害人害己的走法就要回撤,找下一步损人利己的走法。 ② “迷宫”: 这种问题用试探法来... 阅读全文
posted @ 2012-02-08 00:08 一线码农 阅读(7282) 评论(18) 推荐(7)
摘要: 由于最近工作比较忙,好长时间都没有更新博客了,今天就分享下分治思想。一: 思想 有时候我们处理一个复杂的问题,可能此问题求解步骤非常杂,也可能是数据非常多,导致我们当时很难求出或者无法求出,古语有云:步步为营,各个击破,这个思想在算法中称为分治思想,就是我们可以将该问题分解成若干个子问题,然后我们逐一解决子问题,最后将子问题的答案组合成整个问题的答案。二: 条件 当然各个思想都有它的使用领域,所以玩这场分治游戏就要遵守它的游戏规则。 ① 求解问题确实能够分解成若干个规模较小的子问题,并且这些子问题最后能够实现接近或者是O(1)时间求解。 ② 各个子问题之间不能有依赖关系,并... 阅读全文
posted @ 2012-02-07 01:32 一线码农 阅读(8665) 评论(18) 推荐(9)
摘要: 我们学习网络编程最熟悉的莫过于Http,好,我们就从Http入手,首先我们肯定要了解一下http的基本原理和作为,对http的工作原理有一定程度的掌握,对我们下面的学习都是有很大帮助的。一: 工作方式 ①:client和server建立可靠的TCP连接。 ②:然后client通过Socket向server发送http请求。 ③:server端处理请求,返回处理数据。 ④:在http1.0中,client与server之间的tcp连接立即断开。 但在http1.1中,因为默认支持“tcp的长连接”,所以server端采用超时才断开tcp连接的策略。二: 特点 ①:Http是... 阅读全文
posted @ 2012-01-09 01:29 一线码农 阅读(28057) 评论(49) 推荐(38)
摘要: 今天分享一下枚举思想,这种思想也常是码畜,码奴常用的手段,经常遭到码农以上级别的鄙视,枚举思想可以说是在被逼无奈时最后的狂吼。一: 思想 有时我们解决某个问题时找不到一点规律,此时我们很迷茫,很痛苦,很蛋疼,突然我们灵光一现,发现候选答案的问题规模在百万之内,此时我们就想到了从候选答案中逐一比较,一直找到正确解为止。二: 条件 前面也说了,枚举是我们在无奈之后的最后一击,那么使用枚举时我们应该尽量遵守下面的两个条件。 ① 地球人都不能给我找出此问题的潜在规律。 ② 候选答案的集合是一个计算机必须能够承受的。三:举例 下面是一个填写数字的模板,其中每个字都代表数字中的”0~9“,... 阅读全文
posted @ 2012-01-07 19:09 一线码农 阅读(7883) 评论(17) 推荐(10)
摘要: 说到“贪”字,很邪恶的一个词,记得和珅和大人拆解过这个字,为”今“和”贝“,而”贝“字分解成”上面的那个XX“和”人“,意思就是说今天你贪了,明天一座监狱就把你套起来,纵观古今,有多少豪杰与"贪“结下了不解之缘,呵呵,扯远了。 这个贪心的行为在算法中也成为了一种指导思想,也就是说贪心算法所作出的选择在当时的环境下是最好的,说深一点就是它只是某种意义上的局部最优解,但不一定是全局最优解,此时往往接近于最优解。一: 优点 前面也说了,贪心只是求的当前环境下的最优解,而不是追究整体的最优解,所以贪心就避免了为求的整体最优解而枚举各种方案所耗费的时间。二: 问题 ① 不能保证贪心所得出的解是 阅读全文
posted @ 2012-01-03 22:29 一线码农 阅读(8081) 评论(3) 推荐(7)
摘要: 在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下。一:概念 首先我们要知道什么是”进程”,什么是“线程”,好,查一下baike。 进程:是一个具有一定独立功能的程序关于某个数据集合的一次活动。它是操作系统动态执行的基本单元, 在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 线程:是"进程"中某个单一顺序的控制流。关于这两个概念,大家稍微有个印象就行了,防止以后被面试官问到。二:进程 framework里面对“进程”的基本操作的封装还是蛮好的,能够满足我们实际开发中的基本应用。<1> 获取进程信息 fra 阅读全文
posted @ 2012-01-03 02:44 一线码农 阅读(20539) 评论(41) 推荐(46)
摘要: 今天说说递归思想,在我们编码时,有的时候递归能够让我们的算法更加通俗易懂,并且代码量也是大大的减少。比如我先前的系列中说到了关于树的“先序,中序和后序”遍历,那么看看用递归来描叙这个问题是多少的简洁,多么的轻松。 1 #region 二叉树的先序遍历 2 /// <summary> 3 /// 二叉树的先序遍历 4 /// </summary> 5 /// <typeparam name="T"></typeparam> 6 /// <param name="tree"></param&g 阅读全文
posted @ 2011-12-30 02:01 一线码农 阅读(12615) 评论(18) 推荐(19)
摘要: 像俺一样奋斗在一线的码农们,一谈到学编程,都是说要学会XX语言就OK了,其实我们理解的有一点点的偏差,因为我们只说到了三分之一,其实真正的编程应该是:编程=数据结构+算法+XX语言。 对的,XX语言只是一个工具而已,就好比我们知道用笔来写字,但是不见得我们就能写出一手让张恨水为之倾倒的好字,其实我也说过算法不仅仅用于程序设计中,在我们的生活中也处处存在着算法,比如记得我大二学C#的时候,无聊的我们就出了个猜美女芳龄的问题。 1 static void Main(string[] args) 2 { 3 Random random = new Ra... 阅读全文
posted @ 2011-12-29 01:41 一线码农 阅读(25463) 评论(53) 推荐(47)
摘要: 今天是大结局,说下“图”的最后一点东西,“最小生成树“和”最短路径“。一: 最小生成树1. 概念 首先看如下图,不知道大家能总结点什么。 对于一个连通图G,如果其全部顶点和一部分边构成一个子图G1,当G1满足: ① 刚好将图中所有顶点连通。②顶点不存在回路。则称G1就是G的“生成树”。 其实一句话总结就是:生成树是将原图的全部顶点以最小的边连通的子图,这不,如下的连通图可以得到下面的两个生成树。 ② 对于一个带权的连通图,当生成的树不同,各边上的权值总和也不同,如果某个生成树的权值最小,则它就是“最小生成树”。 2. 场景 实际应用中“最小生成树”还是蛮有实际价值... 阅读全文
posted @ 2011-12-26 02:06 一线码农 阅读(9036) 评论(12) 推荐(12)
摘要: 今天来分享一下图,这是一种比较复杂的非线性数据结构,之所以复杂是因为他们的数据元素之间的关系是任意的,而不像树那样被几个性质定理框住了,元素之间的关系还是比较明显的,图的使用范围很广的,比如网络爬虫,求最短路径等等,不过大家也不要胆怯,越是复杂的东西越能体现我们码农的核心竞争力。 既然要学习图,得要遵守一下图的游戏规则。一: 概念 图是由“顶点”的集合和“边”的集合组成。记作:G=(V,E);<1> 无向图 就是“图”中的边没有方向,那么(V1,V2)这条边自然跟(V2,V1)是等价的,无向图的表示一般用”圆括号“。 <2> 有向图 “图“中的边有方向,自然<V. 阅读全文
posted @ 2011-12-24 22:51 一线码农 阅读(7579) 评论(13) 推荐(7)
摘要: 今天说下最后一种树,大家可否知道,文件压缩程序里面的核心结构,核心算法是什么?或许你知道,他就运用了赫夫曼树。听说赫夫曼胜过了他的导师,被认为”青出于蓝而胜于蓝“,这句话也是我比较欣赏的,嘻嘻。一 概念了解”赫夫曼树“之前,几个必须要知道的专业名词可要熟练记住啊。 1: 结点的权 “权”就相当于“重要度”,我们形象的用一个具体的数字来表示,然后通过数字的大小来决定谁重要,谁不重要。2: 路径 树中从“一个结点"到“另一个结点“之间的分支。 3: 路径长度 一个路径上的分支数量。4: 树的路径长度 从树的根节点到每个节点的路径长度之和。 5: 节点的带权路径路劲长度其实也就是该节点到根 阅读全文
posted @ 2011-12-20 00:16 一线码农 阅读(6249) 评论(7) 推荐(8)
摘要: 先前说了树的基本操作,我们采用的是二叉链表来保存树形结构,当然二叉有二叉的困扰之处,比如我想找到当前结点的“前驱”和“后继”,那么我们就必须要遍历一下树,然后才能定位到该“节点”的“前驱”和“后继”,每次定位都是O(n),这不是我们想看到的,那么有什么办法来解决呢? (1) 在节点域中增加二个指针域,分别保存“前驱”和“后继”,那么就是四叉链表了,哈哈,还是有点浪费空间啊。 (2) 看下面的这个二叉树,我们知道每个结点有2个指针域,4个节点就有8个指针域,其实真正保存节点的指针 仅有3个,还有5个是空闲的,那么为什么我们不用那些空闲的指针域呢,达到资源的合理充分的利用。一: 线索... 阅读全文
posted @ 2011-12-12 00:29 一线码农 阅读(5976) 评论(7) 推荐(7)