算法之带权调度问题(有个人新创复杂度n算法)

本文介绍了一种用于任务调度的问题,并提出了两种不同的算法解决方案。一种是复杂度为n^2的贪心算法,另一种是经过优化后的复杂度为n的任务调度算法。通过这两种算法对比,展示了如何有效地安排具有不同延迟和浪费值的任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. packagecom.eshore.sweetop.cupidity;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. publicclassQuest{
  5. Qt[]qt={newQt(4,70),newQt(2,60),newQt(4,50),newQt(3,40),
  6. newQt(1,30),newQt(4,20),newQt(6,10)};
  7. //复杂度n^2
  8. publicvoidgreey(){
  9. Qt[]q=newQt[qt.length];
  10. List<Qt>list=newArrayList<Qt>();
  11. for(inti=0;i<q.length;i++){
  12. intj=0;
  13. for(j=qt[i].delay-1;j>=0;j--){
  14. if(q[j]==null){
  15. q[j]=qt[i];
  16. break;
  17. }
  18. }
  19. if(j<0){
  20. list.add(qt[i]);
  21. }
  22. }
  23. for(inti=0;i<q.length;i++){
  24. if(q[i]!=null)
  25. System.out.println(q[i]);
  26. }
  27. for(Qtqt:list){
  28. System.out.println(qt);
  29. }
  30. }
  31. classMListextendsArrayList<Qt>{
  32. intmax=0;
  33. @Override
  34. publicbooleanadd(Qto){
  35. super.add(o);
  36. if(o.delay>max){
  37. max=o.delay;
  38. }
  39. returntrue;
  40. }
  41. }
  42. //想了好久才想出的复杂度n的算法
  43. publicvoidgreey2(){
  44. MListml=newMList();
  45. MListml2=newMList();
  46. for(inti=0;i<qt.length;i++){
  47. if(!(qt[i].delay<=ml.max&&ml.max<ml.size()+1)){
  48. ml.add(qt[i]);
  49. }else{
  50. ml2.add(qt[i]);
  51. }
  52. }
  53. Qt[]qt2=newQt[ml.size()];
  54. for(inti=0;i<ml.size();i++){
  55. qt2[i]=ml.get(i);
  56. }
  57. Qt[]q=sort(qt2,10);
  58. for(inti=0;i<q.length;i++){
  59. System.out.println(q[i]);
  60. }
  61. for(inti=0;i<ml2.size();i++){
  62. System.out.println(ml2.get(i));
  63. }
  64. }
  65. publicQt[]sort(Qta[],intk){
  66. Qt[]b=newQt[a.length];
  67. //100是基数,可以处理100以下的排序,根据实际情况调整
  68. int[]c=newint[k];
  69. for(inti=0;i<a.length;i++){
  70. c[a[i].delay]=c[a[i].delay]+1;
  71. }
  72. for(inti=1;i<c.length;i++){
  73. c[i]=c[i]+c[i-1];
  74. }
  75. for(inti=b.length-1;i>-1;i--){
  76. b[c[a[i].delay]-1]=a[i];
  77. c[a[i].delay]=c[a[i].delay]-1;
  78. }
  79. returnb;
  80. }
  81. publicstaticvoidmain(String[]args){
  82. Questq=newQuest();
  83. //q.greey();
  84. q.greey2();
  85. }
  86. }
  87. classQt{
  88. staticintcount=1;
  89. finalintid=count++;
  90. intdelay;
  91. intwaste;
  92. Qt(intdelay,intwaste){
  93. this.delay=delay;
  94. this.waste=waste;
  95. }
  96. publicStringtoString(){
  97. return"{id="+id+",delay="+delay+",waste="+waste+"}";
  98. }
  99. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值