算法学习狂暴之路
这里都是记录的一些比较常用的算法,也是个人在慢慢学习中积累的,希望对大家有点帮助。
minigeek
让编程改变世界,让梦想创造奇迹。
展开
-
算法学习笔记之鸡兔同笼
问题:鸡兔同笼,共有头k个,脚m只,求鸡和兔各有多少只?我的解法: 假设兔子只有两个腿,那么k个头就一共有2k只脚,m-2k就是剩下的脚,而这些脚应该是兔子多出来的脚,每个兔子多两只脚,所以兔子就有(m-2k)/2 只,鸡就不言而喻了。程序: //head:总的头数 //foot:总的脚数 public static void JTTL(int head, int foo原创 2016-04-30 18:04:41 · 2345 阅读 · 0 评论 -
算法学习笔记之猴子吃桃
问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。我的理解:(假设An表示第n天剩下的桃子数) 我们知道前一天的桃子比后一天的桃子的关系: An-1 = (An + 1) * 2; 所以。。。程序://n:总的天数原创 2016-04-30 18:59:49 · 1718 阅读 · 0 评论 -
算法学习笔记之折半查找
二分查找又称折半查找 优点: 比较次数少,查找速度快,平均性能好 缺点: 要求待查表为有序表,且插入删除困难。 因此,折半查找方法适用于不经常变动而查找频繁的有序列表。折半查找流程: 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一原创 2016-05-01 15:58:19 · 967 阅读 · 0 评论 -
算法学习笔记之冒泡排序算法
我们这里先介绍几种适用的比较少的数据时候,算法复杂度都是O(n2),介绍三种算法: ①冒泡排序算法 ②选择排序算法 ③插入排序算法 这篇介绍第一种:冒泡排序算法 冒泡排序算法通过多次比较和交换来实现排序,其排序流程如下: 1)对数组中的各数据,依次比较相邻两个元素的大小 2)如果前面的数据大于后面的数据,则交换这两个数据,经过一轮排序后,便把最大的数据排好了 3)再用相同的方法把剩下原创 2016-04-23 12:46:23 · 1032 阅读 · 2 评论 -
算法学习笔记之选择排序算法
接下来我们学习第二种排序算法:选择排序选择排序算法通过选择和交换来排序,其排序流程如下: 1)首先从原始数组中选择最小的一个数据,将其和第一个位置的数据交换 2)接着从剩下的n-1个数据选择出最小的数据,将其和第二个位置的数据交换 3)这样不断重复,直到最后两个数据完成交换,即排好了 示意图如下,有点丑别怪: 红色的表示每次排序要交换数据的位置。 代码:public static原创 2016-04-24 07:49:12 · 1031 阅读 · 0 评论 -
算法学习笔记之插入排序算法
接下我们介绍下一种排序算法:插入排序插入排序算法通过比较和插入来实现排序,其排序流程如下: 1)首先对数组前两个数据进行从小到大排序 2)接下来将第3个数据与排好序的两个数据进行比较,将第3个数据插入合适的位置 3)然后,将第4个数据插入到排好序的3个数据中 4)直到最后一个数据插入到排好序的前n-1个数据中即排好序了 如图: 这里就不解释了,大家应该都看得懂。(第一次前2个数据排,第二原创 2016-04-24 08:07:29 · 923 阅读 · 0 评论 -
算法学习笔记之百钱买百鸡问题
百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱, 用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱? 我们可以设公鸡为x,母鸡为y,小鸡为z,可以得出下列方程: x + y +z=100; 5x + 3y + z/3 = 100; 再看看x,y,z的取值,只有100文钱,5x原创 2016-04-23 10:59:01 · 18357 阅读 · 1 评论 -
算法学习笔记之五家共井问题
问题: 五家人共用一口井,甲家的绳子用两条不够,还要再用乙家的绳子一条才能打到井水;乙家的绳子用三条不够,还要再用丙家的绳子一条才能打到井水;丙家的绳子用四条不够,还要再用丁家的绳子一条才能打到井水;丁家的绳子用五条不够,还要再用戊家的绳子一条才能打到井水;戊家的绳子用六条不够,还要再用甲家的绳子一条才能打到井水。 最后问:井有多深?每家的绳子各有多长? 这道题其实不难,大家应该都可以做出来,原创 2016-04-23 11:38:45 · 2347 阅读 · 0 评论 -
算法学习笔记之约瑟夫环问题
问题: 假设下标从0开始,0,1,2 .. m-1共m个人,从1开始报数,报到k则此人从环出退出,问最后剩下的一个人的编号是多少?我的理解: 设f(m,k,i)为m个人的环,报数为k,第i个人出环的编号,m个人的环第i个出来的人就相当于m-1个人的环第i-1个出来的人,不过这个序号是相当于原来m个人的序号。但注意的是m个人的环第一个出来的人序号要减一。通俗的讲就是:假设10个人的环,报数为3的人原创 2016-05-01 15:46:43 · 1735 阅读 · 0 评论