
Algorithm
zhou191954
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
3个著名加密算法(MD5、RSA、DES)的解析
MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。 MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是转载 2012-10-08 22:59:02 · 1175 阅读 · 0 评论 -
编程之美读书笔记之控制CPU使用率
题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:1. CPU的占用率固定在50%,为一条直线2. CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100)3. CPU的占用率状态是一个正弦曲线[c转载 2014-07-18 20:11:28 · 710 阅读 · 0 评论 -
好的软件人员一生必看的六十本书
一、科学哲学和管理哲学【1】“程序开发心理学”(The Psychology of Computer Programming : Silver Anniversary Edition)【2】“系统化思维导论”(An Introduction to Systems Thinking, Silver Anniversary Edition)【3】“系统设计的一般原理”( General P转载 2014-03-10 13:25:09 · 881 阅读 · 0 评论 -
聚类算法 K-Means算法
在数据挖掘中, k-Means 算法是一种 cluster analysis 的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法。问题K-Means算法主要解决的问题如下图所示。我们可以看到,在图的左边有一些点,我们用肉眼可以看出来有四个点群,但是我们怎么通过计算机程序找出这几个点群来呢?于是就出现了我们的K-Means算法K-Means转载 2012-12-06 22:35:57 · 1712 阅读 · 0 评论 -
蒙特卡罗算法
1、蒙特卡罗算法 基本概述 蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法。传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。 在实际应用中常会遇到一些问题,不论采用确定性算法或随机化算法都无法保证每次都能得到正确的解转载 2013-09-04 10:18:13 · 3421 阅读 · 0 评论 -
自己动手写正则表达式引擎
正则表达式的应用场景非常广阔,分布在计算机技术的方方面面,Linux 下很多工具都围绕正则表达式进行工作的,grep 、awk 、sed 都是文本处理的神器,语言方面perl , python ,Js 等各种脚本语音,都有功能强劲的正则表达式模块,前端编程中判断合法邮箱,判断合法ip地址都有正则表达式的身影。在方便使用正则表达式的同时,你是否也想知道,神奇的正则引擎是怎么生成出来的。在自己转载 2013-01-31 09:36:49 · 1703 阅读 · 0 评论 -
Python算法 Hadoop实例-单轮MapReduce的矩阵乘法
矩阵的乘法只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有定义。一般单指矩阵乘积时,指的便是一般矩阵乘积。若A为i×r矩阵,B为r×j矩阵,则他们的乘积AB(有时记做A · B)会是一个i×j矩阵。其乘积矩阵的元素如下面式子得出: 对矩阵乘法的MapReduce实现方法是: Map函数:对于矩阵M的每个元素M[转载 2012-12-06 22:53:10 · 1685 阅读 · 0 评论 -
Python算法 折半搜索算法(二分法)
在计算机科学中,折半搜索是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。这种搜索算法每一次比较都使搜索范围缩小一半。以上是来自wiki的解释。接下来看看Python的对这个算法的实现:一、自己手动写:转载 2012-12-05 23:11:23 · 1340 阅读 · 0 评论 -
Python算法 归并排序和快速排序
首先来看归并排序,也称合并排序。具体操作参考维基百科。参考代码如下:def merg_sort(lst): if(len(lst) left = merg_sort(lst[:len(lst)/2]) right = merg_sort(lst[len(lst)/2:len(lst)]) result = [] while len(lef转载 2012-12-05 23:05:25 · 495 阅读 · 0 评论 -
Python算法 冒泡排序和选择排序
冒泡排序,是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。具体操作参考wiki。代码如下:def bubble_sort(list2): #swap_test = False for i in range(0, len(list2) - 1):转载 2012-12-05 23:01:32 · 461 阅读 · 0 评论 -
Python算法 Kruskal算法
我们设计了一个简单的例子,如图所示(图中节点间的距离可能跟边值大小不成比例~,红色边为最小生成树的结果!).Python版本实现,这里使用到了Disjoint Set(不交集),关于Disjoint Set参考这里解释。下面是具体实现:from operator import itemgetterclass DisjointSet(dict): def add(self,转载 2012-12-05 22:57:30 · 4447 阅读 · 0 评论 -
Python算法 插入排序和堆排序
插入排序,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。def insertion_sort(list2): for i in range(1, len(list2)转载 2012-12-05 23:00:34 · 444 阅读 · 0 评论 -
算法的时间复杂度
默认均为最坏的时间复杂度时间复杂度包含 1:基本操作的源操作例如相乘 2:该基本操作的重复执行次数相对的,空间复杂度是作为算法所需存储空间的度量 记作S(n)=O(f(n));T(n)=O(f(n))表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。“O”的形式定义为:若f(n)是正整数n的一个函数,则x(n)=O转载 2012-10-08 22:58:05 · 917 阅读 · 0 评论 -
位运算 的探究
前言由于有人没看明白起初的O(n)操作, 所以这里就先简单的介绍一下 O(n log(n))的做法.我这里添加上基本的做法, 然后把O(n)做法的分析写的更详细了一个, 明白的人可能看起来比较啰嗦, 抱歉了.另外有人问假设是大部分都是4个相同, 只有一个是2个相同怎么做, 这个问题我们可以称为4-2问题.这样的话这篇文章主要讲解的就是3-1问题了.为了不偏离主题, 我重转载 2014-11-13 13:43:25 · 650 阅读 · 0 评论