算法
光影和弦 一抹春色
这个作者很懒,什么都没留下…
展开
-
斐波那契数的递归和非递归实现
递归简单来说就是自己调自己递归构造包括两个部分定义递归头递归体菲薄那契数数列的递归实现F(n)=F(n-1)+F(n-2)递归:public class Test{public static void main(String[] args){System…out.println(“查找第几个斐波那契数”);int n=new Scanner(System.in).nextInt();long r=feibona(n);}public static long feibona(n).原创 2020-07-16 21:11:54 · 666 阅读 · 0 评论 -
插入排序
一算法描述:1.第一个元素 可以被认为已经被排序2 从第二个元素开始取出下一个元素 在已排序的元素中从前往后扫描3随着排序的进行 数组前元素逐渐有序二平均时间复杂度: O(n2)空间复杂度:O(1)稳定性: 稳定三 代码实现public class InsertSort{public static void main(String [] args){int [] a={2,43,67,7,98,8};InsertSort(a);system.out.println(Arrays.t原创 2020-07-13 14:54:54 · 342 阅读 · 0 评论 -
十大经典排序算法
0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。时间复原创 2020-07-13 12:57:19 · 407 阅读 · 0 评论 -
选择排序
算法简介选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间吧。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。public class TestSelectSort {public static void main(String[] args) {int [] arr=原创 2020-07-12 23:17:47 · 384 阅读 · 0 评论 -
鸡兔同笼,兔子和鸡一共48只,有108只脚 兔子和鸡各有多少只?
public static void main(String[] args) {// TODO Auto-generated method stubfor(int i=0;i<=48;i++) {for(int j=0;j<=48;j++) {if(i+j48 &&4i+2j108) {System.out.println(“兔子:”+i+","+“鸡:”+j);}}}}}实现二:public class Testjitu {public static原创 2020-07-12 22:53:48 · 1697 阅读 · 0 评论 -
编写一个java类,用来表示出部队中 军 师 旅 团这种树状数据结构,使上级能检索到下级,下级也能检索到上级
一 TreeLeader方法:1.1首先把传过来的list 集合遍历1.2 根据遍历创建一个leader对象 用来接收各级leader对象的name 值1.3 把这个对象添加到之前new 的ArrayList集合中1.4 再获取到当前对象的children的值 再调用本身1.5 当前leader 对象没有子成员时 不满足当前方法参数所需要的条件 递归就会停止public class TreeViewPractice {/** * 练习一:打印所有顶层部门及其子孙部门的信息(名称) 提示:假原创 2020-07-12 20:24:36 · 1593 阅读 · 0 评论 -
二分查找-递归和非递归
一 概述二分查找是一种查询效率非常高的查找算法 又称折半查找二 条件查找内容需满足:1.为顺序结构2 必须按关键字大小有序排列优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表二 代码实现2.1 递归实现public class TestMId {public static void main(String[] args) {// TODO Auto-generated method stub原创 2020-07-06 17:40:53 · 148 阅读 · 0 评论 -
百元买百鸡
一 题目:百钱买百鸡问题:公鸡每只5元,母鸡每只3元,小鸡3只一元。现有100元钱要求买100只鸡,问小鸡、公鸡、母鸡各多少只?二 代码代码1:public class Testgu {public static void main(String[] args) { // TODO Auto-generated method stubint x;int y;int z;int sum=100;int count=100;for(x=0;x<100;x++)for(y=0;y原创 2020-07-06 13:50:12 · 159 阅读 · 0 评论 -
LRU Cache
一 LRU 是什么LRU = Least Recently Used 最近最少使用它是一种缓存逐出策略 cache eviction policies[1]LRU 算法是假设最近最少使用的那些信息,将来被使用的概率也不大,所以在容量有限的情况下,就可以把这些不常用的信息踢出去,腾地方。比如有热点新闻时,所有人都在搜索这个信息,那刚被一个人搜过的信息接下来被其他人搜索的概率也大,就比前两天的一个过时的新闻被搜索的概率大,所以我们把很久没有用过的信息踢出去,也就是 Least Recently Used原创 2020-05-25 11:07:11 · 1487 阅读 · 0 评论 -
算法系列之时间复杂度和空间复杂度
时间复杂度和空间复杂度可以帮助我们根据具体的平台选择合适的算法,要学会以空间换时间或以时间换空间的设计思想,如在单片机等一般是内存空间比较紧张,在追求最优算法时应该可以适当以时间来换空间进行设计,当然在大内存设备上可以选择以空间换时间的设计思想来设计最优算法,所以,时间和空间复杂度可在一定的限制条件下作为判断某个算法或代码块运行快慢的判断方式,主要从如下几个方面了解和学习时间和空间复杂度:数据结...原创 2020-04-27 16:31:54 · 158 阅读 · 0 评论 -
Hash一致性算法(分片机制)
一 哈希简介1.1 简介我们首先来简单介绍一下什么是哈希(以下简称hash),hash本质来说就是映射,或者说是键值对key-value,不同的hash之间不过就是实现key-value映射的算法不同,例如java中计算对象的hashcode值会有不同的算法,常用于各种分布式存储分片的id取模算法等,都属于hash算法。分布式系统中,假设有 n 个节点,传统方案使用 mod(key, n) ...原创 2020-04-03 09:30:18 · 1342 阅读 · 1 评论 -
算法系列之八皇后以及n皇后问题详解
//八皇后问题/*在一个8*8的棋盘上放置8个皇后,不允许任何两个皇后在棋盘的同一行、同一列和同一对角线上。1)对8 x 8的二维数组上的某点a[i]j如果a[s][q]满足|s-i|=|q-j|,a[s][q]在a[i][j]的对角线上。如果s=i,则a[s][q]在a[i][j]的同一列上。2)每行有且仅有一个皇后:声明数组Queen[8] 存放皇后位置//Queen[n]数组...原创 2020-04-01 14:58:36 · 256 阅读 · 0 评论 -
选择排序
目录;一 算法描述二 代码实现三 算法分析一 算法描述:选择排序是表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)时间复杂度,算法实现思路:找到数组中最大的元素,与数组最后一位元素交换 当只有一个数时,则不需要选择了,因此需要n-1趟排序算法描述:初始状态 :无序区为R[1…n],有序区为空;*第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分...原创 2020-03-21 09:44:49 · 83 阅读 · 0 评论 -
递归简论(以汉诺塔为例)
一 递归的定义递归:当一个函数用它自己来定义时,就是递归递归的本质:自己调自己二 递归的设计法则1.基准情形:必须有某些基准情形,它无需递归就能解出2.不断推进:每一次递归的调用都必须要使状况朝向一种基准情形推进3.设计法则:假设所有的递归调用都能运行4.合成效益法则:在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作三 递归的实现(以汉诺塔为例)递归实现的两个条件...原创 2020-03-19 12:36:51 · 146 阅读 · 0 评论 -
算法之快速排序(QuickSort)
目录:一 算法描述二 代码实现三算法分析一算法描述知识储备:需要了解递归和分治法快速排序思路:在数组中找到一个元素(节点),比它小的放在左边,比节点大的放在右边,不断执行这个操作算法执行步骤描述:1.从数组中挑出一个元素,称之为基准2.重新排列数组,所有元素比基准小的摆放在基准前面,所有元素比基准大的摆放在基准后面(相同的数可以到任何一边),在这个分区退出后,该基准就处于数组的中...原创 2020-03-19 10:18:30 · 110 阅读 · 0 评论 -
冒泡排序
目录:一 算法描述二 代码实现三 算法分析冒泡排序综述:冒泡排序是一种简单的交换排序,属于内部排序,属于稳定排序,他重复的走访过要排序的数列,一次比较两个元素,如果他们顺序错误就把他们交换过来,走访数列的工作是重复的进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是由于越小的元素会经由交换慢慢“”“浮”到数列的顶端。算法描述:1.比较相邻元素,如果第一个比第二个...原创 2020-03-16 12:20:05 · 229 阅读 · 0 评论 -
排序算法综述(一)
一.排序算法说明1.排序的定义对一序列对象根据某个关键字进行排序2.分类可以分为内部排序和外部排序内部排序:待排序记录存放在计算机随机存储器中进行的排序过程外部排序:待排序记录数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。加粗样式3.术语时间复杂度:一个算法执行所耗费的时间空间复杂度:运行完一个程序所需内存的大小。稳定性:如果a原本在b前面...原创 2020-03-15 22:30:59 · 225 阅读 · 0 评论