任务调度并行算法的Java简单实现

今天下午抽空写了下并行调度算法的Java版本,是想把这个思路先实现了,后面改写Python版作为参考,调试这个版本之后,再来写Python版,发现差别还不小。

Java版本的目前支持动态赋值,目前的元素个数是10个,可以根据情况修改,并行度是4,可以根据情况修改。

import java.util.Random;
import java.util.Arrays;
public class Test {
    public static void main(String args[]) {
    new Test().test();
       // int[] array ={96,59,55,34,22,11,7,5,3,2};
       // new Test().getMaxIndex(array);
    }

    public void test(){
        System.out.println("test");

        int ARRAY_SIZE = 10;
        int test_array[] = new int[ARRAY_SIZE];
        for (int i = 0; i < ARRAY_SIZE; i++) {
            test_array[i] = new Random().nextInt(100);
        }

        Arrays.sort(test_array);

        for (int i = 0; i < ARRAY_SIZE; i++) {
            System.out.println(test_array[i]);
        }

        int GRP_NO = 4;
        int array_group[][] = new int[GRP_NO][ARRAY_SIZE];
        int array_sum_group [] = new int[GRP_NO];
        for (int i = 0; i < GRP_NO; i++) {
            array_group[i][0] = test_array[ARRAY_SIZE - i - 1];
            array_sum_group[i] = test_array[ARRAY_SIZE - i - 1];
            System.out.println("init value :"+array_sum_group[i]);
        }


        int min_grp_no = 0;
        int max_index = 0;


        for (int i = ARRAY_SIZE-GRP_NO-1 ; i >= 0; i--) {
            //get min array group index
            System.out.println("new value:"+test_array[i]);
            min_grp_no = getMinGrpNo(array_sum_group);
            max_index = getMaxIndex(array_group[min_grp_no]);
            array_group[min_grp_no][max_index+1] = test_array[i];
            array_sum_group[min_grp_no] +=  test_array[i];
            System.out.println(array_group[min_grp_no][max_index+1]+","+array_group[min_grp_no][max_index]+","+array_sum_group[min_grp_no]);
        }

    System.out.println(array_group);
    }
    public  int getMinGrpNo(int[] array) {
        int temp_value = 0;
        int min_index = 0;
        if(array.length>1) {
              temp_value = array[0];
              for (int i = 1; i < array.length; i++) {
                   if (temp_value > array[i]) {
                      temp_value = array[i];
                      min_index = i;
                    }
                  }
            }
        System.out.println("getMinGrpNo:"+min_index+" value:"+temp_value);
        return min_index;
    }

    public  int getMaxIndex(int[] array) {
        int temp_value = 0;
        int max_index = 0;
        if(array.length>1) {
            temp_value = array[0];
            for (int i = 1; i < array.length; i++) {
                if(array[i] != 0) {
                    if (temp_value > array[i]) {
                        temp_value = array[i];
                        max_index = i;
                    }
                }
            }
        }
        System.out.println("getMaxIndex:"+max_index+" value:"+temp_value);
        return max_index;
    }

}

程序的执行结果如下,整体的思路是生成随机数的数组,然后对数组排序,然后对数组做数据处理,每次添加新元素都需要对每组累计值做一个排序,累计值最小的可以添加新的元素,直至元素被添加完。

所以自己在逻辑的部分写了两个函数来单独处理:

一个是得到累计值最小的数组,得到数组的下标

另外一个是查找数组中元素的最大下标,比如数组有3个元素,那么最大下标就是2(数组从0开始)

test
18
28
31
33
41
57
59
59
79
86
init value :86
init value :79
init value :59
init value :59
new value:57
getMinGrpNo:2 value:59
getMaxIndex:0 value:59
57,59,116
new value:41
getMinGrpNo:3 value:59
getMaxIndex:0 value:59
41,59,100
new value:33
getMinGrpNo:1 value:79
getMaxIndex:0 value:79
33,79,112
new value:31
getMinGrpNo:0 value:86
getMaxIndex:0 value:86
31,86,117
new value:28
getMinGrpNo:3 value:100
getMaxIndex:1 value:41
28,41,128
new value:18
getMinGrpNo:1 value:112
getMaxIndex:1 value:33
18,33,130

当然上面的实现,如果拿10个元素来看,好像意义不大,但是如果是100个,200个这种场景,你会明显感觉到效果了。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2018-04-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

Python: 早点知道这些就不会这样了

现在在Python 2的代码中都用import from future来导入Python 3的输出和除法。现在用到的几乎所有库都支持Python 3,因此会很快...

2754
来自专栏面朝大海春暖花开

c++入门笔记

C++函数的返回值类型可以是除数组和函数以外的任何类型。 函数可以返回一个引用,将函数说明为返回一个引用的主要目的是为了将函数用在赋值运算符的左边。函数原型的表...

1284
来自专栏C语言及其他语言

[每日一题]IP判断

今天介绍的这题难度不大,和前面的弟弟的作业有异曲同工之妙 题目描述 在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。 合法的IP...

3555
来自专栏Golang语言社区

Go语言中反射的正确使用

介绍 反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是Go语言中的反射模型。 反射有两个问题...

3618
来自专栏python3

python 递归与高阶函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

1584
来自专栏喵了个咪的博客空间

zephir-(6)运算符

#zephir-运算符# ? ##前言## 先在这里感谢各位zephir开源技术提供者 了解的动态变量和静态变量之后我们今天来了解一下在编码工作中至关重要的运算...

3669
来自专栏技术/开源

30分钟?不需要,轻松读懂IL

先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用。到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点...

2007
来自专栏灯塔大数据

技术 | Python从零开始系列连载(六)

导读 为了解答大家初学Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载 上一期学习了Python程序的基本控制流程,相信大家...

3397
来自专栏Python爬虫与数据挖掘

Python正则表达式的简单应用和示例演示

前一阵子小编给大家连续分享了十篇关于Python正则表达式基础的文章,感兴趣的小伙伴可以点击链接进去查看。今天小编给大家分享的是Python正则表达式的简单应用...

1414
来自专栏数据结构与算法

P3414 SAC#1 - 组合数

题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供。 寂月城网站是完美信息教室的官网。地址:http://191.101.11.174/mgzd 。 题目描述...

3456

扫码关注云+社区

领取腾讯云代金券