算法学习week_10

 compareTo()方法:

1.还原单字符asc码的差值,相等返回0,小于大于分别返回差值

2.比较两个字符串,如果两个字符串首字母相同则进行比较下一个

注:int类型不能直接使用,得转换成String类型

1.递归-汉诺塔

在经典汉诺塔问题中,有 3 根柱子下x,y,z及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子x上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。

第一步将x柱子上的圆盘分成第N个和其余N-1个,将y柱子为辅助柱,z柱子为目标柱,借助辅助柱z,将N-1个盘子移动到y上,第二步移动第N个盘子,将其移动到z柱子上,第三步将z柱子作为辅助柱子,将y中的N-1个盘子移动到z上,x柱子作为辅助柱。

这里用到分治思想,将相同问题统一化。2

package exercise;
class two_searc
{
//将x作为源柱子,y作为辅助柱子,z作为目标柱子
	public static int count =0;
	public static void move(char x,int n, char z)
	{
		System.out.println("Move "+n+"from"+x+"to "+z);
	}
	public static void hanio(int n,char x,char y,char z)
	{
		count++;
		if(n==1)
		{
			move(x, n, z);
		}else {
			hanio(n-1,x,y,z);
			move(x, n, z);
			hanio(n-1,y,z,x);
		}
	}
}

1.2递归-二分查找

将while循环条件转换成了递归

package exercise;
class two_search
{
	static int binarySearch(int [] arr,int low ,int high,int key)
	{
		if(low>high) return -1;
		int mid = low+((high-low)>>1);
		int midVal = arr[mid];
		if(midVal<key) {
			return binarySearch(arr, mid+1, high, key);
		}else if(midVal>key) {
			return binarySearch(arr, low, mid-1, key);
		}else {
			return mid;
		}
	}
}

adfb41d579cd4254b9070165e2dade03.png

 递归练习题:                                          小白上楼梯

//根据题中所给的前三步,可以将n>3之后的问题转化为与之相关的
package exercise;
import java.util.Scanner;
class two_search
{
	public static void main(String[]args)
	{
		Scanner s = new Scanner(System.in);
		int n = s.nextInt();
	}
	static int num(int n)
	{
		if(n==1) return 1;
		if(n==2) return 2;
		if(n==3) return 4;
		return num(n-1)+num(n-2)+num(n-3);
	}
}

旋转数组的最小数字(二分)

package exercise;
import java.util.Scanner;
class two_search
{
	static int num(int [] a)
	{
		int begin =0,end = a.length;
		if(a[begin]<a[end]) return a[begin];
	    while(begin<end-1)
	    {
	        int mid = begin+(end-begin)>>1;
	        if(a[begin] < a[mid])
	        {
	            begin = mid+1;
	        }else{
	            end = mid;
	        }
	    }
	    return a[begin];
	}
}

                                          在有空字符串的有序字符串数组中查找(二分)

static int indexof(String s [],String target)
{
    int begin = 0,end = s.length;
    while(begin<end)
    {
        int mid = begin+((end-begin)>>1);
        while(s[mid].equals("")){
            mid++;
        }
        if(s[mid].campareTo(target)>0)
        {
            end = mid-1;
        }else if(s[mid].campareTo(target)<0){
        {
            begin = mid+1;
        }else{
            return mid;
        }
    }
    return -1;
}

                                                           最长连接递增子序列

public static int num(int a [])
{
    if(a.length == 0) return 0;
    int count = 1,max = 0;
    for(int i = 0;i<a.length-1;i++)
    {
        if(a[i]<a[i+1])
        {
            count++;
        }e;se{
            max = Math.max(count,max);
            count = 1;
        }
    }
    max = Math.max(count,max);
    return max;
}

                                                       设置一个高效求a的n次方的算法

//常规递归:
    public static int num(int a,int n)
    {
        if(n==0) return 1;
        return a*num(a,n-1);
    }
//位运算做法
      static int pow(int a,int n) {
    	if(n==0) return 1;
    	int chu = a;
    	int num = 1;
    	while((num<<1)<=n)
    	{
    		chu = chu*chu;
    		num <<=1;
    	}
    	return chu*pow(a, n-num);
    }
    

 

 

 

 

你好!对于心脏病预测的问题,使用循环神经网络(RNN)是一种常见的方法。RNN适用于处理序列数据,而心电图信号就是一种序列数据。在使用RNN进行心脏病预测时,你可以将心电图信号作为输入序列,然后通过训练RNN模型来预测患者是否患有心脏病。 首先,你需要准备一个合适的数据集,其中包含心电图信号和相应的心脏病标签。可以使用公开的心电图数据集,如PTB数据库或MIT-BIH数据库。然后,你可以对数据进行预处理和特征工程,如数据清洗、滤波、降采样等。 接下来,你可以构建一个RNN模型。RNN模型由一系列循环层组成,每个循环层都会处理一个时间步的输入数据。你可以选择不同类型的RNN单元,如简单循环单元(SimpleRNN)、长短期记忆网络(LSTM)或门控循环单元(GRU)。通过添加适当的全连接层和激活函数,你可以将RNN模型输出映射到二分类问题(有或无心脏病)的结果。 然后,你可以使用训练集对RNN模型进行训练,并使用验证集进行模型调优。在训练过程中,你可以使用适当的损失函数(如交叉熵)和优化算法(如随机梯度下降)来最小化模型的预测误差。 最后,你可以使用测试集对训练好的模型进行评估,并计算模型的性能指标,如准确率、精确率、召回率等。这些指标可以帮助你评估模型的预测能力和泛化能力。 需要注意的是,心脏病预测是一个复杂的医学问题,仅仅使用心电图信号可能不能得到准确的预测结果。通常情况下,还需要结合其他患者的临床信息和医学知识来进行综合评估。因此,在进行心脏病预测时,建议与专业医生合作,并遵循相关的医学准则和规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物皆可der

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值