基本算法思想Java实现的详细代码
基本算法思想Java实现的详细代码
算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题。在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为例介绍一些常用的算法思想。
分类
- 穷举算法思想
- 递推算法思想
- 递归算法思想
- 分治算法思想
- 概率算法思想
穷举算法思想
穷举算法的基本思想
从所有可能情况中搜索正确答案
1. 对于一种可能情况,计算其结果。
2. 判断结果是否满足,如不能满足者执行第一步来搜索下一个可能的情况;如满足则表示选找到一个正确答案。
穷举算法实例
仅有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?
算法实现
int Qiongju(int head,int foot)
{
int i,j,chicken,rabbit;
for(i=0;i<=head;i++)
{
j = head-i;
if(i*2+j*4==foot)
{
chicken = i;
rabbit = j;
return 1;
}
}
return 0;
}
递推算法思想
递推算法基本思想
递推算法是一种理性思维模式的代表,其根据已有的数据和关系,逐步推到而得到结果。对推算法的执行过程:
- 根据已知结果和关系,求解中间结果
判定是否但到要求,若没有继续执行第一步,若有则表示找到一个正确结果
递推算法往往需要知道答案和问题之间的实际逻辑关系。再许多数学问题中往往都有着明确的计算公式可以遵循,因此可以采用递推算法来实现。递推算法实例
斐波那契数列:兔子产仔问题
题目:如果一对两个月大的兔子以后每个月都可以生一对小兔子,而刚出生的兔子两个月后才可以生小兔子,假定一年内没有兔子死亡事件,那么一年后共有多少对兔子呢?
实现算法
int Fibonacci(int n)
{
int t1,t2;
if(n==1||n==2)
{
return 1;
}
else
{
t1 = Fibonacci(n-1); //递归调用
t2 = Fibonacci(n-2);
return t1 + t2;
}
}
递归算法思想
递归算法即在程序中不反复调用自身达到解决问题的方法,是一个方法在其方法体内调用自身方法调用方式。在递归中主方法又是被调方法。执行递归将反复调用其自身。每调用一层就进入新的一层。
递归调用分为两种情况:
- 直接递归,即在方法中调用方法本身
- 间接递归,即间接地调用一个方法
编写递归方法时,必须使用if语句强制在未执行递归前返回。
递归算法实例
递归算法常用于有明显递推性质的问题和一些数学问题。
问题:求阶乘
n!=n*(n-1)(n-2)(n-3)………*2*1
(n-1)!=(n-1)(n-2)(n-3)………*2*1
得到递推公式:
n! =n*(n-1)!
算法实现
long fact(int n)
{
if(n<=1)
return 1;
else
return n*fact(n-1);
}
分治算法思想
分治算法基本思想
分治算法就是把一个复杂问题分为规模较小的,计算简单的小问题,然后综合小问题得到最后答案的思想。分治算法执行过程如下:
- 对于一个规模为N的问题,若给问题比较容易解决,则直接解决;否则执行下面的步骤。
- 将该问题分解为M个规模较小的问题,这些问题相互独立,并且与原问题相互独立。
- 递归这些小问题
- 然后,将各个小问题合并得到完问题的解
分治算法实例
题目:一个袋子里有三十个硬币,其中有一枚假币,并且假币和真币一某一样,肉眼很难分辨,目前只知道假币比真币轻一点,请问如何区分假币?
算法分析
- 首先为每个硬币编号,然后然后将所有硬币等分为两份,放在天平两边。
- 再将较轻的那一份等分为两份重复上述方法
- 直到剩下两个硬币,较轻的一个就是假币
算法实现
int FalseCoin(int coin[],int low,int high)
{
int i,sum1,sum2,sum3;
int re = 0;
sum1 = sum2 = sum3 = 0;
if(low+1==high)
{
if(coin[low]<coin[high])
{
re = low + 1;
return re;
}
else
{
re = high +1;
return re;
}
}
if((high-low+1)%2==0) //n是偶数
{
for(i=low;i<=low+(high-low)/2;i++)
{
sum1= sum1+coin[i];
}
for(i=low+low+(high-low)/2;i<=high;i++)
{
sum2= sum2+coin[i];
}
if(sum1>sum2)
{
re=FalseCoin(coin,low+(high-low)/2,high);
return re;
}
else if(sum1<sum2)
{
re=FalseCoin(coin,low,low+(high-low)/2);
return re;
}
}
else
{
for(i=low;i<=low+(high-low)/2-1;i++)
{
sum1= sum1+coin[i];
}
for(i=low+low+(high-low)/2+1;i<=high;i++)
{
sum2= sum2+coin[i];
}
sum3=coin[low+(high-low)/2];
if(sum1>sum2)
{
re=FalseCoin(coin,low+(high-low)/2+1,high);
return re;
}
else if(sum1<sum2)
{
re=FalseCoin(coin,low,low+(high-low)/2-1);
return re;
}
else
{
re=low+(high-low)/2+1;
return re;
}
}
return re;
}
基本算法思想Java实现的详细代码的更多相关文章
- 6. EM算法-高斯混合模型GMM+Lasso详细代码实现
1. 前言 我们之前有介绍过4. EM算法-高斯混合模型GMM详细代码实现,在那片博文里面把GMM说涉及到的过程,可能会遇到的问题,基本讲了.今天我们升级下,主要一起解析下EM算法中GMM(搞事混合模 ...
- 几种简单的排序算法(JAVA)
几种排序算法(JAVA) 一.代码 package com.hdwang; import java.util.Arrays; /** * Created by admin on 2017/1/20. ...
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- 对一致性Hash算法,Java代码实现的深入研究(转)
转载:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读 ...
- 【转载】对一致性Hash算法,Java代码实现的深入研究
原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...
- paip.java 注解的详细使用代码
paip.java 注解的详细使用代码 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...
- java连接oracle数据库详细代码
详细代码: import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;imp ...
- 利用朴素贝叶斯算法进行分类-Java代码实现
http://www.crocro.cn/post/286.html 利用朴素贝叶斯算法进行分类-Java代码实现 鳄鱼 3个月前 (12-14) 分类:机器学习 阅读(44) 评论(0) ...
- Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】
http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...
随机推荐
- 理解Javascript_02_执行上下文02
上一篇我们讲到在全局环境下的代码段中,执行上下文环境中如何处理数据: 变量.函数表达式——变量声明,默认赋值为undefined: this——赋值: 函数声明——赋值: 这篇文章讲关于函数执行上下文 ...
- 【转】idea project中导入其他文件夹下的模块,可能出现java.io.FileNotFoundException: XXX.xml
在一个project 中导入一个java 模块, 我要执行该模块的main函数 ,在main函数中有一个 FileReader(“generatorConfig.xml”) 而generatorCon ...
- Day45--js基本小结
JavaScript基本总结 一:基本背景 01:注:ES6就是指ECMAScript 6.(2015 ECMAScript6 添加类和模块) ECMAScript和JavaScript的关系 199 ...
- Android与MVC设计模式
写在前面,之前做过一段时间移动开发,后来因为工作原因搁浅了,最新重新拿起Android权威编程指南学习,顺道做个学习笔记. 首先呢,我想说无论是计算机科班出身还是培训班出身,都听说过高内聚低耦合以及M ...
- 把磁力下载站改为python系统
已经一年半载没有写博客了,搞得上来不知道写些什么. 索马里影视下载 WWW.IBMID.COM 现在用的是CENTOS 7 系统, 经历了多次点技术变更.开源版本使用了django网站框架重写,之 ...
- oracle数据库修改密码
忘记了数据库的登录密码,oracle数据库无法登录了. 先删除原先的密码保存文件: del E:\oracle_app\Administrator\product\11.2.0\dbhome_1\da ...
- HDU - 5067 / HDU - 5418 TSP
集合表示多用[0,n)表示方法 HDU - 5067 经典TSP,每个顶点恰经过一次最优 #include<bits/stdc++.h> #define rep(i,j,k) for(in ...
- [转] Spring Boot实战之Filter实现使用JWT进行接口认证
[From] http://blog.csdn.net/sun_t89/article/details/51923017 Spring Boot实战之Filter实现使用JWT进行接口认证 jwt(j ...
- [转] log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
[From] http://www.tuicool.com/articles/INveIf 注:下文中的“桥接”.“转调”.“绑定”等词基本都是同一个概念. log4j-over-slf4j和slf4 ...
- Yarn 包管理工具
已经安装的 yarn add vue vue@2.2.5 yarn add element-ui -S yarn add bootstrap@4.0.0-alpha.6 --save yarn ...