快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

java贪心算法代码 js贪心算法

java代码,多机调度问题,怎么解释

多机调度问题的Java实现(贪心算法)

创新互联是一家专注于网站设计、网站制作与策划设计,长宁网站建设哪家好?创新互联做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:长宁等地区。长宁做网站价格咨询:028-86922220

具体问题描述以及C/C++实现参见网址

[java] view plain copy print?

import java.util.ArrayList;  

import java.util.Collections;  

import java.util.LinkedList;  

import java.util.List;  

/** 

* 多机调度问题--贪心算法 

* @author Lican 

*/  

public class JobMachine {  

public static class JobNode implements Comparable{  

int id;//作业的标号  

int time;//作业时间  

public JobNode(int id,int time){  

this.id=id;  

this.time=time;  

}  

@Override  

public int compareTo(Object x) {//按时间从大到小排列  

int times=((JobNode)x).time;  

if(timetimes) return -1;  

if(time==times) return 0;  

return 1;  

}         

}  

public static class MachineNode implements Comparable{  

int id;//机器的标号  

int avail;//机器空闲的时间(即机器做完某一项工作的时间)  

public MachineNode(int id,int avail){  

this.id=id;  

this.avail=avail;  

}  

@Override  

public int compareTo(Object o) {//升序排序,LinkedList的first为最小的  

int xs=((MachineNode)o).avail;  

if(availxs) return -1;  

if(avail==xs) return 0;  

return 1;  

}  

}  

public static int greedy(int[] a ,int m){  

int n=a.length-1;//a的下标从1开始,所以n(作业的数目)=a.length-1  

int sum=0;  

if(n=m){  

for(int i=0;in;i++)  

sum+=a[i+1];  

System.out.println("为每个作业分别分配一台机器");  

return sum;  

}  

ListJobNode d=new ArrayListJobNode();//d保存所有的作业  

for(int i=0;in;i++){//将所有的作业存入List中,每一项包含标号和时间  

JobNode jb=new JobNode(i+1,a[i+1]);  

d.add(jb);  

}  

Collections.sort(d);//对作业的List进行排序  

LinkedListMachineNode h=new LinkedListMachineNode();//h保存所有的机器  

for(int i=1;i=m;i++){//将所有的机器存入LinkedList中  

MachineNode x=new MachineNode(i,0);//初始时,每台机器的空闲时间(完成上一个作业的时间)都为0  

h.add(x);  

}  

int test=h.size();  

for(int i=0;in;i++){  

Collections.sort(h);  

MachineNode x=h.peek();  

System.out.println("将机器"+x.id+"从"+x.avail+"到"+(x.avail+d.get(i).time)+"的时间段分配给作业"+d.get(i).id);  

x.avail+=d.get(i).time;  

sum=x.avail;  

}  

return sum;  

}  

public static void main(String[] args) {  

int[] a={0,2,14,4,16,6,5,3};  

int m=3;  

int sum=greedy(a,m);  

System.out.println("总时间为:"+sum);  

}  

}  

/** 

运行结果: 

将机器1从0到16的时间段分配给作业4 

将机器2从0到14的时间段分配给作业2 

将机器3从0到6的时间段分配给作业5 

将机器3从6到11的时间段分配给作业6 

将机器3从11到15的时间段分配给作业3 

将机器2从14到17的时间段分配给作业7 

将机器3从15到17的时间段分配给作业1 

总时间为:17 

*/

JAVA-数组转化问题

public class test6 {

int a[] = { 1, 2, 3, 4, 5, 6, 7 };

int b[] = { 2, 1, 4, 3, 6, 5, 7 };

public static void main(String args[]) {

test6 test = new test6();

test.go();

}

public void go() {

if (smart(a, b))

System.out.println("n=" + n(a, b));

}

public boolean smart(int[] a, int[] b) {

int a_[] = array(a);

int b_[] = array(b);

if (a.length == b.length) {

for (int c = 0; c a.length; c++) {

if (a_[c] != b_[c]) {

System.out.println("cannot transform");

return false;

}

}

for (int c = 0; c a.length; c++)

System.out.print(a[c]+" ");

System.out.println();

for (int c = 0; c b.length; c++)

System.out.print(b[c]+" ");

System.out.println();

return true;

} else {

System.out.println("cannot transform");

return false;

}

}

public int[] array(int[] a) {

int[] z = new int[a.length];

for (int c = 0; c a.length; c++)

z[c] = a[c];

for (int c = 0; c z.length - 1; c++) {

for (int d = c + 1; d z.length; d++) {

if (z[c] z[d]) {

int x = z[c];

z[c] = z[d];

z[d] = x;

}

}

}

return z;

}

public int n(int[] a, int[] b) {

int c = 0;

for (int d = 0; d a.length; d++)

if (a[d] != b[d])

c += 5;

return (c + 8) / 10;

}

}

找零钱问题 [贪心算法](java实现)

public getMin{

public int MinNumber=0;

public int findMax(int[] a){

for(int i=0;ia.length;i++){

if(a[i]==0) return a[--i];

}

return a[a.length-1];

}

public boolean Compare(int a,int b){

public boolean flag=true;

if(ab) flag=flase;

return flag;

}

public int getMinNumber(int[] M,int Money){

int[] findM=new int[M.length];

int index=0;

for(int i=0;iM.length;i++){

boolean f = this.Compare(M[i],money)

if(f) findM[index++]=M[i];

}

int max = this.findMax(findM);

MinNumber++;

if((Money-max)!=0) {

getMinNumber(M,Money-max)

}

return MinNumber;

}

public int[] Start(){

System.out.println("请输入查询组数");

int group=System.in.read();

int[] M={1,2,5,10,20,50,100};

int[] Result = new Int[group];

int index=0;

while (group-- 0){

System.out.println("请输入金额");

int money=System.in.read();

Result[index++] = getMinNumber(M,money);

MinNumber=0;

}

}

public void print(int[] MinNumber){

for(int i=0;iMinNumber.length.i++){

System.out.println(MinNumber[i]+" ");

}

}

}

public static void main(String[] args){

new getMin().print(new getMin().Start());

}

没测试啊,有问题请勿喷,呵呵


网页名称:java贪心算法代码 js贪心算法
文章网址:http://6mz.cn/article/dosigps.html

其他资讯