java动态规划算法
⑴ java里如何实现动态算法如把一个算式((A*B)>0 || (C+D)=0)解析成JAVA代码里的逻辑,其中ABCD为变量。
这个是这样的,|| 是短路或操作, 就是说前面一个表达式 为假时才执行后面一个表达式, 即
当 (A*B) >0 时 不执行 (C+D) == 0 判断操作(其实是==,单个等号是赋值)
当 (A*B) <= 0 时 执行(C+D)==0判断
你问出这个问题只能说明你的大学教授水平比较次。。。。。
⑵ java的动态规划法和贪心算法求解
分太少了。。
⑶ 算法分析中动态规划的四个基本步骤
1、描述优解的结构特征。
2、递归地定义一个最优解的值。
3、自底向上计算一个最优解的值。
4、从已计算的信息中构造一个最优解。
⑷ ~~求解~~用动态规划算法求两数组各元素间差的最小值,JAVA代码或方法思路
import java.util.Arrays;
public class Test {
public static void getCha(int [] a,int []b){
int min =Integer.MAX_VALUE;
int sss=0;
int kkk = 0;
int c = 0;
int d = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
int temp = Math.abs(a[i]-b[j]);
if(temp<min){
min = temp;
sss = a[i];
kkk = b[j];
c=i;
d=j;
}
}
}
System.out.println("最大差距:"+min+"数组A["+c+"]"+sss+"数组B["+d+"]"+kkk);
}
public static void main(String[] args) {
int []a = new int[8];
int []b = new int[12];
for (int i = 0; i < a.length; i++) {
a[i] = (int)( Math.random()*100);
}
System.out.println(Arrays.toString(a));;
for (int i = 0; i < b.length; i++) {
b[i] = (int) (Math.random()*100);
}
System.out.println(Arrays.toString(b));
getCha(a,b);
}
}
⑸ JAVA里如何实现动态算法
如果只是简单的加减乘除,采用递归方式,按照运算符优先级计算,最后得到结果如果复杂一点,可以采用动态编译,你写的字符串算式,就变成java代码,最后采用反射执行两种方式。
⑹ java十大算法
算法一:快速排序算法
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。
算法步骤:
1 从数列中挑出一个元素,称为 "基准"(pivot),
2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
算法二:堆排序算法
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
堆排序的平均时间复杂度为Ο(nlogn) 。
算法步骤:
创建一个堆H[0..n-1]
把堆首(最大值)和堆尾互换
3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置
4. 重复步骤2,直到堆的尺寸为1
算法三:归并排序
归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
算法步骤:
1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4. 重复步骤3直到某一指针达到序列尾
5. 将另一序列剩下的所有元素
⑺ 那,就是之前那个算法“找2个串中最长连续相同子串”,在java中用动态规划算法如何实现呢
没读懂
⑻ 常用的算法在java里边怎么做,例
(一) 问题描述
给定由n个整数(可能为负整数)组成的序列a1,a2,a3,···,an,求该序列的子段和的最大值。当所有整数均为负整数是定义其最大子段和为0,一次定义,所求的最优质值为:max{0、max子段和}。
(二) 算法描述
动态规划法的基本思想:
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。
算法设计:
#include "stdafx.h"
int MaxSum(int a[],int n,int &Start,int&End){
intsum=0;
int*b,t;
b=newint[n+1];
b[0]=0;
for(inti=1;i<=n;i++){
if(b[i-1]>0){
b[i]=b[i-1]+a[i];
}
else {
b[i]=a[i];t=i;
}
if(b[i]>sum){
sum=b[i];
Start=t;
End=i;
}
}
delete[]b;
returnsum;
}
int main(int argc, char* argv[])
{
inta[7]={0,-2,11,-4,13,-5,-2},sum,Start,End,i;
sum=MaxSum(a,6,Start,End);
for(i=Start;i<=End;i++){
printf("%d ",a[i]);
}
printf("\n%d\n",sum);
getchar();
getchar();
return0;
⑼ java动态规划 计算数n由k个数相加而成的情况数
publicclassMyClass{
publicstaticvoidmain(String[]args){
System.out.println(">>>resultcount:"+method(6,3));
}
publicstaticintmethod(intn,intk){
List<List<Integer>>list=newArrayList<>();
for(inti=0;i<k;i++){
if(i==0){
for(intj=1;j<n;j++){
List<Integer>li=newArrayList<>();
li.add(j);
list.add(li);
}
continue;
}
List<List<Integer>>listNew=newArrayList<>();
for(List<Integer>integers:list){
for(intj=integers.get(integers.size()-1);j<n;j++){
List<Integer>li=newArrayList<>();
li.addAll(integers);
li.add(j);
listNew.add(li);
if(i+1==k){
intres=0;
for(Integerinteger:li){
res+=integer;
}
if(res!=n){
listNew.remove(li);
}
}
}
}
list.clear();
list.addAll(listNew);
}
for(List<Integer>integers:list){
for(Integerinteger:integers){
System.out.print(integer+" ");
}
System.out.println();
}
returnlist.size();
}
}