一个类似AOV或者AOE的数据结构的类似排序的算法

news/2024/11/24 3:07:20/

背景:
一个东西的执行有多个入参和出参, 一个东西的出参又可以是别的东西的入参, 因此执行的依赖关系.

在这里插入图片描述
草图里a b c d e f为三个东西, 上面的数字是入参,下面的数字是出参
当前已知这6个东西, 和他们的入参出参
求他们的运行顺序.
要求同样执行顺序的东西可以并行执行.

代码如下:


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;import java.util.LinkedList;public class TestAOV {private static final Logger LOGGER = LogManager.getLogger(TestAOV.class);@Testpublic void test() {LOGGER.info("zzzzzzzzzz");Entity a = new Entity();a.input = new int[]{1, 3, 5};a.output = new int[]{7, 9};a.name = "a";Entity b = new Entity();b.input = new int[]{7};b.output = new int[]{11};b.name = "b";Entity c = new Entity();c.input = new int[]{9, 10};c.output = new int[]{13, 18};c.name = "c";Entity d = new Entity();d.input = new int[]{13, 14};d.output = new int[]{19, 7};d.name = "d";Entity e = new Entity();e.input = new int[]{13, 15};e.output = new int[]{21};e.name = "e";Entity f = new Entity();f.input = new int[]{11, 19};f.output = new int[]{20};f.name = "f";//如果一个entity的输入不是任何entity的输出,第一顺位 放入大集合.  //不需要mid-in mid-out//代码里选外部参数,再参数池的顺序找值.//大集合的结果参数加输入参数够 .第二顺位, 放大集合//同理一直到所有entity都排序好LinkedList<Entity> list = new LinkedList<>();list.add(a);list.add(b);list.add(c);list.add(d);list.add(e);list.add(f);LinkedList<LinkedList> result = new LinkedList<>();LinkedList<Integer> necessaryInput = new LinkedList<>();
//        for (Entity entity: list){
//            necessaryInput =
//        }
//        所有的input的集合减去output的集合 //代码不写了直接赋值necessaryInput.add(1);necessaryInput.add(3);necessaryInput.add(5);necessaryInput.add(10);necessaryInput.add(18);necessaryInput.add(14);necessaryInput.add(15);LinkedList<Integer> poolParams = new LinkedList<>();for (Entity entityX : list) {LinkedList<Entity> entities = new LinkedList<>();for (Entity entityY : list) {//if (entityY.input 是 ( necessaryInput 并 poolParams )的子集 ){if (is子集(entityY.input, necessaryInput, poolParams) && !在结果里(entityY, result)) {entities.add(entityY);}}//如果有,放入结果if (entities.size() != 0) {//entities 的output都放进poolParams;for (Entity es :entities) {poolParams.addAll(makeList(es.output));}result.add(entities);}}//LOGGER.info(result);for (LinkedList<Entity> aa : result) {LOGGER.info("-------------------------");for (Entity zzz : aa) {LOGGER.info(zzz.name);}}}public static LinkedList<Integer> makeList(int[] a) {LinkedList<Integer> x = new LinkedList<>();for (int i = 0; i < a.length; i++) {x.add(a[i]);}return x;}// a是(b并c)的子集public static boolean is子集(int[] a, LinkedList<Integer> b, LinkedList<Integer> c) {LinkedList<Integer> d = new LinkedList<>();d.addAll(b);d.addAll(c);//TODO 去重for (int i = 0; i < a.length; i++) {if (d.contains(a[i])) {} else {return false;}}return true;}// a在 result里public static boolean 在结果里(Entity a, LinkedList<LinkedList> result) {for (LinkedList<Entity> aa : result) {if (aa.contains(a))return true;}return false;}}class Entity {int[] input;int[] output;String name;
}

执行结果:
在这里插入图片描述


http://www.ppmy.cn/news/684107.html

相关文章

UART、RS-232、RS-422、RS-485之间有什么区别

通讯问题&#xff0c;和交通问题一样&#xff0c;也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通&#xff0c;UART比作车站&#xff0c;那么一帧的数据就好比汽车。汽车跑在路上&#xff0c;要遵守交通规则。如果是市内&#xff0c;一般限速30、40,而高速公路…

UART、RS-232、RS-422、RS-485

通讯问题&#xff0c;和交通问题一样&#xff0c;也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通&#xff0c;UART比作车站&#xff0c;那么一帧的数据就好比汽车。汽车跑在路上&#xff0c;要遵守交通规则。如果是市内&#xff0c;一般限速30、40,而高速公路…

什么是微服务

作者&#xff1a;老刘 链接&#xff1a;https://www.zhihu.com/question/65502802/answer/802678798 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 一文详解微服务架构本文将介绍微服务架构和相关的组件&#xff0c…

一篇文章了解什么是串口,UART、RS-232、RS-422、RS-485

通讯问题&#xff0c;和交通问题一样&#xff0c;也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通&#xff0c;UART比作车站&#xff0c;那么一帧的数据就好比汽车。汽车跑在路上&#xff0c;要遵守交通规则。如果是市内&#xff0c;一般限速30、40,而高速公路…

AMD公司的灵魂Athlon产品回忆录

在CPU领域里的竞争&#xff0c;AMD与Intel从来就没有停止过&#xff0c;AMD也并没有如几年前人们所料想的那样被Intel压着打&#xff0c;反而步步紧逼Intel做出了种种不得以的决策。从AMD第一块CPU芯片开始&#xff0c;就已经发动了对Intel的猛烈进攻。 Athlon已不仅是一款处理…

计网笔记

文章目录 Chapter 1 计算机网络和因特网Chapter 2 应用层Chapter 3 运输层Chapter 4 网络层Chapter 5 链路层和局域网Chapter 6 无线网和移动网 Chapter 1 计算机网络和因特网 因特网(Internet)主机(host)端系统(end system)通信链路(communication link)&#xff1a;由不同类…

linuex查看繁忙_[个人笔记] 关于linux的常见问题合集

关于linux的常见问题合集&#xff0c;有技术问题&#xff0c;上 bug200.com 有什么方法可以设置吗chmod 755对于/opt/lampp/htdocs它的所有内容包括子文件夹和文件&#xff1f; 将来&#xff0c;如果我在htdocs&#xff0c;如何将其权限自动设置为755&#xff1f; 此操作有效&a…

UART、RS-232、RS-422、RS-485的区别

v3学院带你一次性认清UART、RS-232、RS-422、RS-485的区别 https://www.cnblogs.com/laokai/p/6488910.html 通讯问题&#xff0c;和交通问题一样&#xff0c;也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通&#xff0c;UART比作车站&#xff0c;那么一帧的…