随笔 - 224  文章 - 0  评论 - 216  阅读 - 109万

随笔分类 -  【算法】

Arithmetic
一道小学数学题
摘要:代码:public static void CalcAMathProblem(){ /* * 思路: * ∵ 好好好=10*(学*学+学x习) * ∴ 好好好=学*(10*学+习) * */ int 学, 习, 好, 结果; for (学 = 1; 学 <= 9; 学++) { for (习 = 0; 习 <= 9; 习++) { for (好 = 1; 好 <= 9; 好++) { 结果 = 学 * (10 * 学 + 习);... 阅读全文
posted @ 2013-11-22 14:37 Frank.Fan 阅读(287) 评论(0) 推荐(0) 编辑
浅谈服务器压力解决方案
摘要:优化服务器性能,从后往前说归根结底不外乎以前几种情况:优化数据库优化代码使用静态数据下面就分别做下介绍。一、数据库优化尽可能的使用SP,而不是让sql语句裸奔;表结构设计要合理,起码要遵守三范式;数据库设计三范式:第一范式:原子性。表中不能套表第二范式:有主键第三范式:引用通过主键.合理地设计索引,正确地使用索引;对于超极大表(千万级别)最好采用分区表的方式存放,Oralce、SqlServer和Mysql都支持。 二、业务代码优化减少数据库往返,数据库连接是很重要且宝贵的资源,尽量避免没调用一次方法就读取一次数据库的情况,别小看这一条,我在项目就看到有同事在一个for循环中都次读取数据库。. 阅读全文
posted @ 2013-09-29 22:48 Frank.Fan 阅读(2974) 评论(2) 推荐(0) 编辑
二分查找
摘要:介绍二分查找,又称折半查找,二分搜索,是一种在有序数组中查找某一特定元素的算法。优点是比较次数少,查找速度快,平均性能好;缺点是要求待查数组有序,且插入删除困难。因此二分查找适合于那些不经常变动而查找频繁的的有序列表。假设数组中元素是有序的,搜索过程首先从数组的中间开始,如果中间元素刚好是要查找的元素,则搜索过程结束;否则利用中间位置记录的元素将数组分成前后两个字数组,如果某一特定元素大于或者小于中间元素,则在数组中大于或者小于中间元素的那一半查找,也从数组中间元素开始比较,重复以上步骤。虽然第一篇二分搜索论文在1946年就发表了,但是第一个没有错误的二分搜索程序却直到1962年才出现.复杂度 阅读全文
posted @ 2013-06-07 22:58 Frank.Fan 阅读(610) 评论(0) 推荐(0) 编辑
括号匹配问题
摘要:写一个小程序玩玩:括号匹配问题。要求如下:本题目要求编一个程序,该程序能够输入一段字符串进行括弧匹配检查。如果语句中"("和")"数目相等,且能够完整的匹配成对,此时输出"正确"。否则输出"错误"。方法一:计数式基本思路:思路:设置一个计数器counter,遇到(,就+1,遇到),就-1,最后看counter是不是0就行.对于")("这种情况,可以用首个)>0来排除。实现代码:/// <summary>/// 返回0为匹配,否则不匹配/// </summary>pu 阅读全文
posted @ 2013-06-02 23:29 Frank.Fan 阅读(957) 评论(0) 推荐(0) 编辑
求2个集合的交集
摘要:求2个集合的交集 第一种方法最简单、粗暴的循环遍历2个集合,判断如果有相同的元素就取出来。假设集合1的长度为M,集合2的长度为N,那么,时间复杂度为:O(M*N) 代码:public static List<string> GetIntersection(List<string> list1, List<string> list2){ List<string> list3 = new List<string>(); //第一种方法:循环遍历 //O(n×m) for (int i = 0; i < list1.Coun 阅读全文
posted @ 2013-06-02 17:31 Frank.Fan 阅读(11497) 评论(2) 推荐(0) 编辑
汉诺塔算法
摘要:一个印度传说:在一个神庙里有有一个汉诺塔,就是一个铜板上插着3个宝石针,其中一根针从上到下的穿着由小到大的铜片64片,僧人们一次只能移动一个铜片,并且不论移到哪个针上,必须保持小片在大片上面。僧侣们预言,当所有的铜片都从穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消亡。当然,这只是个传说,如果每秒钟移动一次,那么移完这个汉诺塔将耗费大约 5845亿年,到那时说不定又有新的星系被人类发现了。汉诺塔算法可以根据推理得出:public class HanioDemo{ //把第几个盘子从哪个杆子上移动到哪个杆子上 private void Move(int iNum, char... 阅读全文
posted @ 2013-04-06 22:19 Frank.Fan 阅读(658) 评论(0) 推荐(0) 编辑
C#实现双向链表
摘要:一、定义双向链表是链表的一种,它的每个数据节点都有2个指针,分别指向直接前驱和直接后序。所以,从双向链表中的任意一个节点开始,都可以很方便的访问它的前驱节点和后继结点。双链表中有2条不同方向的链,即每个节点中除了next域存放后继结点地址外,还增加一个指向其直接前驱的指针域prev。双链表的特点:1)双链表有头指针head唯一确定2)带头结点的双链表的某些运算将变得方便3)将头结点和尾节点连接起来,可成为双向循环链表双链表的好处在于,如果在链表中需要通过某个节点得到它的直接前驱或者直接后继结点时,双链表直接用prev或者next引用就能找到;而单链表要做到这一点,必须再次从head节点开始一个 阅读全文
posted @ 2013-03-31 23:30 Frank.Fan 阅读(2071) 评论(1) 推荐(2) 编辑
哈希表与应用
摘要:1.介绍 数组的特点是:寻址容易,插入和删除困难; 而链表的特点是:寻址困难,插入和删除容易。 这个世界上有没有一种能够综合两者优点的,既寻址容易又插入和删除容易的数据结构?Yes,它就是Hash表。 2.哈希散列方法 1)除留取余法 2)平方散列法 3)Fibonacci散列法 3.哈希表使用范围 快速查找... 阅读全文
posted @ 2012-08-08 17:28 Frank.Fan 阅读(3529) 评论(0) 推荐(0) 编辑
递归的Fibonacci在数羊
摘要:一、由数羊引起的有一道经典的面试题是这样的。 题目:一头母羊的寿命是5年,它会在第2年底和第4年底各生下一头母羊,第5年底死去, 问一开始农场有1头母羊,N年后,农场会有多少只母羊? (假设没有公羊也会生羊,而且只只生母羊,不要较真 - -!)乍一看不知所云,其实慢慢分析so easy! 思路: 年数 羊的个数 备注 1 1 1只羊 2 2=1+1 生1只 3 2 不生 4 4=2+2 第1只在第4年生,第2只在第2年生 5 3=4-1 第1只样死去 6 6=3+3 第2只在4年生,第3只在第2年生,第4只在第2年生 7 5=6-1 第2... 阅读全文
posted @ 2012-08-04 22:39 Frank.Fan 阅读(762) 评论(0) 推荐(0) 编辑
排序算法总结
摘要:1.冒泡排序 2.选择排序 3.归并排序 4.快速排序 5.插入排序 阅读全文
posted @ 2012-03-23 13:56 Frank.Fan 阅读(1527) 评论(0) 推荐(0) 编辑
插入排序
摘要:一、基本思想 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。 插入排序非常类似于整扑克牌。 在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。 如果输入数组已经是排好序的话,插入排序出现... 阅读全文
posted @ 2012-03-23 13:52 Frank.Fan 阅读(33843) 评论(3) 推荐(2) 编辑
Quick Sort 快速排序
摘要:一、基本思想 通过使用一个基准值将列表分为2个子列表,具体的过程是: 将基准值放在正确的位置上,在一个子列表中放入小于基准值的元素,另一个子列表中放入大于基准值的元素。 这就是快速排序(Quick Sort)的思想。 快排算法提供了目前已知最快的排序技术,除了某些极其特殊的情况下之外,快速排序徐几乎适用于所有场合。 二、算法描述 快速排序使用一系列递归调用将列表分为若干越来越小的子列表... 阅读全文
posted @ 2012-03-23 13:45 Frank.Fan 阅读(910) 评论(0) 推荐(0) 编辑
Merge Sort 归并排序
摘要:一、基本思想 归并排序是建立在归并操作上的一种有效的排序算法。 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将一个数组分为越来越小的子列表,每个子列表单独进行排序,然后合并形成更大的有序列表。 通过归并子列表元素来合并子列表就是归并排序(Merge Sort) 二、算法描述 1. 将一个列表分割成2个子列表 2. 第1个列表调用索引[first,... 阅读全文
posted @ 2012-03-23 13:41 Frank.Fan 阅读(622) 评论(0) 推荐(0) 编辑
选择排序
摘要:一、基本思想 选择排序首先遍历列表,并且将最小的元素与第一个元素进行比较,随后遍历剩余的元素并将次小的元素与第二个元素进行比较,依次类推。 二、算法描述 选择排序算法从索引0处开始确定列表中最小元素的位置,并交换这个最小元素与arr[0]中元素的位置,该步骤会将最小的元素放在arr[0]中,列表中其他元素则保持无序状态; 1. 排序处理继续前进至索引1,并且确定子列表arr[1]…arr[... 阅读全文
posted @ 2012-03-23 13:24 Frank.Fan 阅读(514) 评论(0) 推荐(0) 编辑
Bubble Sort 冒泡排序
摘要:一、基本思想冒泡排序的基本概念是依次比较相邻的两个元数,将小的数放在前面,大的数放在后面。即在第一趟排序中,首先比较第1个数和第2个数,将小数放前,大树放后;然后比较第2个数和第3个数,将小数放前,大数放后。以此类推,如此继续,直到比较最后两个数,将小数放前,大数放后。至此,第一趟排序结束,将最大的数放到了最后!第二趟:仍从第一对数开始比较,将小数放前,大数放后,一直比到倒数第2个数(倒数第1个数已经是最大的了),第二趟结束,倒数第2的位置上得到一个新的最大数。以此类推,重复以上过程,直至最终完成排序。由于排序过程中总是小数往前放,大数往后放,类似于气泡上升,所以成为冒泡排序。二、示例代码 . 阅读全文
posted @ 2012-03-23 10:54 Frank.Fan 阅读(612) 评论(3) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示