随笔分类 - 算法
摘要:折半查找主要用于有序数组中查找某一特定元素。 时间复杂度 二分搜索每次把搜索区域砍掉一半,很明显时间复杂度为。(n代表集合中元素的个数) 空间复杂度 c#实现/// <summary> /// 折半查询,适用于顺序字符中查找,比如:int[]{0,1,2,3,4,5,6,7,8,9}中查找8,或者英文字典中查找某个单词 /// </summary> public cla...
阅读全文
摘要:二叉树中的先序,中序,后续遍历很容易让人迷糊,记录一下概念。 遍历是将二叉树中的结点信息由非线性排列变为某种意义上的线性排列。也就是说,遍历操作使非线性结构线性化。 一棵二叉树由根结点、左子树和右子树三部分组成,若规定 D、L、R 分别代表遍历根结点、遍历左子树、遍历右子树,则二叉树的遍历方式有 6 种:DLR、DRL、LDR、LRD、RDL、RLD。由于先遍历左子树和先遍历右子树在算法设计上没有...
阅读全文
摘要:蛇形算法类似于下面的排序 A B C D100 99 98 9793 94 95 9692 91 90 89 …………如果拿1-100的数字来分配当然蛇形算法最好不过的了。 主算法产生类似0123321001233210....private static List<int> GetIndex(int num, int group)//num 代表新生数量,group代表班级数量。 ...
阅读全文
摘要:话说学校要将100小学升初中的学生分配到4个初一班级里面,分配完以后这四个班级语文、数学两科之和的平均分要基本相同。 分析: 学生两科分数都在100到0分不等,那么只需要在分配以后保证每个班级的总分基本等于 100个学生的语文+数学总分/4就可以保证每个班级的平均分基本相同 算法思想: 目的:把m份数据分配到n个人的头上,m份数据里面的数据大小个不相同 过程:1.1 把待分配的数据m从大到小排序;...
阅读全文
摘要:对于两个变量值的交换除了用第三个变量作为中介还可以用其他算法来实现:如需要交换 a=1,b=2的值我们可以这样实现: 1、用第三个变量值交换int a = 1;int b = 2;int c = a;a = b;b = c;2、用加减法交换a = a + b;b = a - b;a = a - b;或a = a - b;b = a + b;a = b - a;3、用异或(XOR)法交换 a = a...
阅读全文
摘要:在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录。 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sit...
阅读全文