基本算法思想Java实现的详细代码

Java实现Apriori算法 简介: Apriori算法是第一个关联规则挖掘算法,也是最经典的算法。它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与剪枝(去掉那些没必要的中间结果)组成。该算法中项集的概念即为项的集合。包含K个项的集合为k项集。项集出现的频率是包含项集的事务数,称为项集的频率。如果某项集满足最小支持度,则称它为频繁项集。 基本思想: 首先扫描数据库中所需要进行分析的数据,在设置完支持度以及置信度以后,在最小支持度的支持下产生频繁项,即统计所有项目集中包含一个或一个以上的元素频数,找 阅读详情

基本算法思想Java实现的详细代码


算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题。在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为例介绍一些常用的算法思想。

分类

  1. 穷举算法思想
  2. 递推算法思想
  3. 递归算法思想
  4. 分治算法思想
  5. 概率算法思想 

穷举算法思想

穷举算法的基本思想

从所有可能情况中搜索正确答案 
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;
}

递推算法思想

递推算法基本思想

递推算法是一种理性思维模式的代表,其根据已有的数据和关系,逐步推到而得到结果。对推算法的执行过程:

  1. 根据已知结果和关系,求解中间结果
  2. 判定是否但到要求,若没有继续执行第一步,若有则表示找到一个正确结果 
    递推算法往往需要知道答案和问题之间的实际逻辑关系。再许多数学问题中往往都有着明确的计算公式可以遵循,因此可以采用递推算法来实现。

    递推算法实例

    斐波那契数列:兔子产仔问题 
    题目:如果一对两个月大的兔子以后每个月都可以生一对小兔子,而刚出生的兔子两个月后才可以生小兔子,假定一年内没有兔子死亡事件,那么一年后共有多少对兔子呢?

实现算法
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);
}

分治算法思想

分治算法基本思想

分治算法就是把一个复杂问题分为规模较小的,计算简单的小问题,然后综合小问题得到最后答案的思想。分治算法执行过程如下:

  1. 对于一个规模为N的问题,若给问题比较容易解决,则直接解决;否则执行下面的步骤。
  2. 将该问题分解为M个规模较小的问题,这些问题相互独立,并且与原问题相互独立。
  3. 递归这些小问题
  4. 然后,将各个小问题合并得到完问题的解

分治算法实例

题目:一个袋子里有三十个硬币,其中有一枚假币,并且假币和真币一某一样,肉眼很难分辨,目前只知道假币比真币轻一点,请问如何区分假币?

算法分析
  1. 首先为每个硬币编号,然后然后将所有硬币等分为两份,放在天平两边。
  2. 再将较轻的那一份等分为两份重复上述方法
  3. 直到剩下两个硬币,较轻的一个就是假币
算法实现
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;
}
常用算法代码模板 (1) :基础算法 常用算法模板——基础算法:排序、二分、高精度、前缀和与差分、位运算、双指针、离散化、区间合并 阅读详情

相关推荐

java常见算法篇【完整版】

java常见算法

jsmeng626的博客 2428

Java常见算法思想

1、穷举算法思想 在使用穷举法首先要明确问题的答案范围,然后在可能范围内列举出所有可能结果进行验证,最终得到符合条件的结果。 算法实例:鸡兔同笼问题,鸡兔同笼。有100个头,300个脚,请问分别有多少鸡和兔。 分析:鸡可能的范围是0-100只,我们就在0-100直接搜索结果。 public static void main(String[] args) { int heads = 10...

huangpf_vcx 1452

docker安装的 n8n提示Your n8n server is configured to use a secure cookie, however you are either visiting

将原来的docker n8n进行删除后即可通过一下方式重新安装,如安装完n8n,提示。

满地找牙的博客 3341

java中常用的算法思想

算法概念 常用的算法概念有: 分治算法 动态规划算法 贪心算法 回溯算法 分支限界算法 分治算法 分治算法思想是,将一个大问题,拆解成多个小问题。各小问题间彼此独立。 举一个经典场景的例子,求一亿个数中出现次数前10的数。 直接求解的方式是比较困难的: 解: 遍历一亿个数,记录每个数出现的次数,然后排序求前10. 这种解法占用的内存是及其大的。 分治思想解法 把一亿个数 分成10000组,求各个组的出现次数的前十 就比较容易了 然后把10000个组 通过两个合并的方式,最终得到出现次数的前十

XXXL码 407

常见算法思想java

本文整理了常见算法思想有:枚举、递推、递归、分治、动态规划、贪心、回溯

qq_45241885的博客 1830

Java】——基础算法Java代码

算法基础笔记,随学随更

qq_50497708的博客 1449

JAVA基础算法

数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法数据结构息息相关。今天的讲义中会涉及部分数据结构的专业名词,如果各位铁粉有疑惑,可以先看一下哥们后面录制的数据结构,再回头看算法

qwerasdctds的博客 573

java思想算法_基本算法思想Java实现详细代码

基本算法思想Java实现详细代码算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题。在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为例介绍一些常用的算法思想。分类穷举算法思想递推算法思想递归算法思想分治算法思想概率算法思想穷举算法思想穷举算法基本思想从所有可能情况中搜索正确答案1. 对于一种可能情况,计算其结果。2. 判断结果是否...

weixin_34551573的博客 254

经典算法(16)堆排序图解及其代码实现

堆排序是经典的排序算法,这篇博客对堆排序的过程用图解的过程进行说明,并有完整的代码实现

扬帆向海的博客 1万+

基本算法之穷举算法

基本算法之穷举算法 一.穷举算法基本思想 穷举算法基本思想就是从所有的可能的情况中搜索正确的答案,其执行步骤大致如下: 1.对于一种可能的情况,计算其结果; 2.判断结果是否满足要求,如果不满足则执行第1步来搜索下一个可能的情况;如果满足要求,则表示寻找到一个正确的答案。 注意事项:在使用穷举算法时,需要明确问题答案的范围,这样才能在指定的范围内搜索答案,指定范围之后,就可以使用循环语句和条件...

lv_hulk的博客 2072

数据结构算法之冒泡、选择、插入、快速、堆、归并思想介绍及代码实现Java

以下所有代码实现均采用Java语言列表每两个相邻的数,如果前面比后面大,则交换这两个数一趟排序结束后,无序区减少一个数,有序区增加一个数一趟排序记录最小的数,放到第一个位置在一趟排序记录列表无序区最小的数,放到第二个位置依此类推关键点:有序区和无序区,无序区最小数的位置原地排序,不需要额外开辟新数组初始时手里(有序区)只有一张牌每次(从无序区)摸一张牌,插入到手里已有牌的正确位置取一个元素P(第一个元素),使元素P归位列表被P分成两部分,左边都比P小,右边都比P大。

SheepYangStudy的博客 1016

Java插入排序算法实现

Java插入排序算法实现问题描述输入:一组数据<a1,a2,a3,...,an><a_1,a_2,a_3,...,a_n> 输出:排序数据<b1,b2,b3,...,bn>,满足b1<b2<b3<...<bn−1<bn<b_1,b_2,b_3,...,b_n>,满足b_1<b_2<b_3<...<b_{n-1}<b_n算法思想插入排序是最简单的排序算法之一,算法思想与我们玩纸牌思想类似,从左手为空

软货成熊之路 590

Java实现经典排序算法----6、快速排序(内含Java代码

6、快速排序(Quick Sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 6.1 算法描述 快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下: 从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有...

小喵的博客 6824

十大排序(含java代码

十大排序算法详解:包括冒泡排序、选择排序、快速排序、插入排序、计数排序、希尔排序、归并排序、桶排序、堆排序、基数排序

qq_62928039的博客 1万+

java编程思想实用整理

java编程思想这本书籍的整理,主要针对本人认为比较有趣重要的思想和特性进行的学习和整理。 对象存储位置,java基本数据类型 static关键字,java垃圾回收机制

qq_41721646的博客 1046

程序员必须知道的10大基础实用算法及其讲解

程序员必须知道的10大基础实用算法及其讲解 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

zzjjiandan的专栏 1009

JAVA算法思想总结:穷举、递推、递归、概率、分治

穷举是最简单的一种算法,依赖计算机的强大计算能力,来穷尽每一种可能的情况,从而达到求解问题的目的。特点:算法效率低,适合没有明显规律可循的场合。

晓风残月淡的博客 1600

20140101-20230707员工持股计划数据,员工认购比例、高管认购比例、锁定期限说明

每个压缩包都附有数据表和数据来源员工持股计划样本选择:全部A股数据区间:预案公告日20140101-20230707,日度数据(数据库中该项数据的全部内容)全部字段:序号证券代码 证券简称 董事会预案日股东大会公告日实施进度实施完成日初始资金规模(万元)预计持股数量(万股)拟发行价格(元)实际资金规模(万元)实际持股数量(万股)占总股本(%)成交平均价(元)资金来源 股票来源 持有人数 员工认购比例高管认购比例股份锁定日锁定期锁定期限说明是否自行管理存续期(年)压缩包所含文件:数据样例:

上一篇: Java中堆内存和栈内存详解
活在光下
博客等级 码龄18年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值