• 活动安排问题


    活动安排问题

    一问题分析
    enter description here
    二代码实现

    java
    package greedySelctor;

    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.Comparator;

    public class bin
    {

    public static void main(String[] args) throws IOException
    {
    

    // int []s= {0,1,3,0,5,3,5,6,8,8,2,12};
    // int []f= {0,4,5,6,7,8,9,10,11,12,13,14};
    int []s= {0,1,2,3,4,5,6};
    int []f= {0,10,9,8,7,11,20};
    element []ele=new element[s.length-1] ;
    for(int i=1; i<s.length; i++)
    {
    ele[i-1] =new element(s[i], f[i], i);
    }
    greedySelctor myGreedySelctor=new greedySelctor(ele);
    }

    }
    class greedySelctor
    {
    element []ele;
    int count=0; //被安排活动的个数
    public greedySelctor(element []ele) throws IOException
    {
    this.ele=ele;
    GreedySelctor();
    display();
    }
    public void GreedySelctor()
    {
    Arrays.sort(ele, new Comparator(){
    //传入的时候由用户自己选
    @Override
    public int compare(element o1, element o2) {
    // TODO Auto-generated method stub
    int finsh1 = o1.f;
    int finsh2 = o2.f;
    if (finsh1>finsh2)
    {
    return 1;
    }
    else
    {
    if (finsh1<finsh2)
    {
    return -1;
    }else
    {
    return 0;
    }

    		    }
    			
    		}
    	});
    	ele[0].x=1;  //第一个活动一定会被选上
    	int f=ele[0].f;
    	count++;
    	for(int i=1; i<ele.length; i++)
    	{
    		if(f<=ele[i].s)  //安排
    		{
    		   ele[i].x=1;
    		   f=ele[i].f;
    		}
    		else
    		{
    			ele[i].x=0;
    		}
    	}
    }
    public void display() throws IOException
    {
    	BufferedWriter fout=new BufferedWriter(new FileWriter("out.txt"));
    	for(int i=0; i<ele.length; i++)
    	{
    		fout.write("ele["+i+"]:");
    		fout.newLine();
    		fout.write("i:	"+ele[i].i);
    		fout.newLine();
    		fout.write("s:	"+ele[i].s);
    		fout.newLine();
    		fout.write("f:	"+ele[i].f);
    		fout.newLine();
    		fout.write("x:	"+ele[i].x);
    		fout.newLine();
    	    fout.write("+++++++++++++++++++");
    	    fout.newLine();
    	}
    	fout.flush();
    }
    

    }
    class element //活动类
    {
    int s; //开始时间
    int f; //结束
    int x; //是否被选中
    int i; //编号
    public element(int s,int f,int i)
    {
    this.s=s;
    this.f=f;
    this.i=i;
    }
    }

    三 运行结果
    ele[0]:
    i: 1
    s: 1
    f: 4
    x: 1
    +++++++++++++++++++
    ele[1]:
    i: 2
    s: 3
    f: 5
    x: 0
    +++++++++++++++++++
    ele[2]:
    i: 3
    s: 0
    f: 6
    x: 0
    +++++++++++++++++++
    ele[3]:
    i: 4
    s: 5
    f: 7
    x: 1
    +++++++++++++++++++
    ele[4]:
    i: 5
    s: 3
    f: 8
    x: 0
    +++++++++++++++++++
    ele[5]:
    i: 6
    s: 5
    f: 9
    x: 0
    +++++++++++++++++++
    ele[6]:
    i: 7
    s: 6
    f: 10
    x: 0
    +++++++++++++++++++
    ele[7]:
    i: 8
    s: 8
    f: 11
    x: 1
    +++++++++++++++++++
    ele[8]:
    i: 9
    s: 8
    f: 12
    x: 0
    +++++++++++++++++++
    ele[9]:
    i: 10
    s: 2
    f: 13
    x: 0
    +++++++++++++++++++
    ele[10]:
    i: 11
    s: 12
    f: 14
    x: 1
    +++++++++++++++++++

    四 总结收获

    1. 贪心算法的关键在于问题具有贪心性质

    2. 学习到了对象数组排序的方法
      Arrays.sort(ele, new Comparator(){
      //传入的时候由用户自己选
      @Override
      public int compare(element o1, element o2) {
      // TODO Auto-generated method stub
      int finsh1 = o1.f;
      int finsh2 = o2.f;
      if (finsh1>finsh2)
      {
      return 1;
      }
      else
      {
      if (finsh1<finsh2)
      {
      return -1;
      }else
      {
      return 0;
      }

      	    }
      		
      	}
      });
      
      具体解释见链接(https://blog.csdn.net/qq_37937537/article/details/80445731)
      

      五 不足
      代码写的不够熟练

  • 相关阅读:
    Java字符串跟ASCII码互转
    java 一款可以与ssm框架完美整合的web报表控件
    使用<c:set>标签配置项目路径
    Linux下部署tomcat及tomcat war包应用程序
    支付宝app支付服务端流程
    文本数据增量导入到mysql
    java 读取mysql中数据 并取出
    实现读取文本数据,在将数据导入mysql
    给一个整形数组,给出一个值,当这个值是数组某些数字的和,求出数组下标的值
    文本数据和mysql 里面的数据比较
  • 原文地址:https://www.cnblogs.com/Howbin/p/9917997.html
Copyright © 2020-2023  润新知