java活动安排_贪心法求解活动安排(java实现)
貪心法描述:
貪心算法總是作出在當(dāng)前看來最好的選擇。也就是說貪心算法并不從整體最優(yōu)考慮,它所作出的選擇只是在某種意義上的局部最優(yōu)選擇。
在一些情況下,即使貪心算法不能得到整體最優(yōu)解,其最終結(jié)果卻是最優(yōu)解的很好近似。
問題描述:
現(xiàn)有一組活動由你安排,但要求你在最短的時間內(nèi)安排盡可能多的活動。
代碼如下:
Activity類用于封裝活動對象,包括活動的開始時間和結(jié)束時間,另外實現(xiàn)了Comparable接口,用于按照結(jié)束時間非遞減排序
public class Activity implements Comparable {
private String startTime;//活動開始時間
private String endTime;//活動結(jié)束時間
public Activity(String startTime,String endTime){
this.startTime=startTime;
this.endTime=endTime;
}
/**
* 按照活動結(jié)束時間非遞減排序
*/
@Override
public int compareTo(Activity obj) {
String targetEndTime=obj.getEndTime();
int endHour=Integer.parseInt(endTime.split(":")[0]);
int endMin=Integer.parseInt(endTime.split(":")[1]);
int targetEndHour=Integer.parseInt(targetEndTime.split(":")[0]);
int targetEndMin=Integer.parseInt(targetEndTime.split(":")[1]);
int i=endMin>targetEndMin?1:(endMin
return endHour>targetEndHour?1:(endHour
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
@Override
public String toString() {
return startTime + "~" + endTime;
}
}ActivityPlan類為具體的執(zhí)行類,通過其layout方法來安排活動
public class ActivityPlan {
List res=new ArrayList();
public List layout(Iterator activities){
if(!activities.hasNext()){
return res;
}
Activity activity=activities.next();
int size=res.size();
if(size==0){
res.add(activity);
}else{
Activity preActivity=res.get(size-1);
String preEndTime=preActivity.getEndTime();
String thisStartTime=activity.getStartTime();
if(legal(preEndTime,thisStartTime)){
res.add(activity);
}
}
return layout(activities);
}
/**
* 當(dāng)前活動的開始時間是否在上一個活動的結(jié)束時間之后
*/
private boolean legal(String preEndTime, String thisStartTime) {
int preHour=Integer.parseInt(preEndTime.split(":")[0]);
int preMin=Integer.parseInt(preEndTime.split(":")[1]);
int thisHour=Integer.parseInt(thisStartTime.split(":")[0]);
int thisMin=Integer.parseInt(thisStartTime.split(":")[1]);
int i=preMin>thisMin?-1:(preMin
int j=preHour>thisHour?-1:(preHour
return j>=0;
}
}Main類用于代碼測試
public class Main {
public static void main(String[] args) {
Set activitys=new TreeSet();
activitys.add(new Activity("9:30","10:30"));
activitys.add(new Activity("7:30","8:50"));
activitys.add(new Activity("10:40","11:30"));
activitys.add(new Activity("8:00","10:30"));
activitys.add(new Activity("8:30","11:40"));
activitys.add(new Activity("10:30","12:30"));
ActivityPlan plan=new ActivityPlan();
List res=plan.layout(activitys.iterator());
for(Activity activity:res){
System.out.print("\t"+activity);
}
}
}程序輸出:7:30~8:50?? ?9:30~10:30?? ?10:40~11:30
總結(jié)
以上是生活随笔為你收集整理的java活动安排_贪心法求解活动安排(java实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java加快内存回收_java内存管理之
- 下一篇: 如何删除java里的类_java Fil