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

news2024/9/27 17:34:18

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

在这里插入图片描述
草图里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);

    @Test
    public 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.coloradmin.cn/o/695856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【图像处理OpenCV(C++版)】——5.4 图像平滑之中值平滑(滤波)

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

IntelliJ IDEA - 一篇解决如何多模块项目提交到同一个 Git 仓库

问题描述 事情是这样的&#xff0c;最近新建了一个项目&#xff08;多模块&#xff09;&#xff0c;这个不必多说大家就知道长什么样子&#xff08;文件结构&#xff09;&#xff0c;问题是在我写完后想提交项目到 Git 仓库时&#xff0c;发现每个模块都要设置 Remote Git 地址…

Get “https://xx.xx.x.xx/v2/“: x509: certificate signed by unknown authority

问题描述 使用Windows docker客户端login docker私库&#xff0c;无法登录提示&#xff1a; Get "https://xx.xx.x.xx/v2/": x509: certificate signed by unknown authority原因分析&#xff1a; 由于harbor做了ssl&#xff0c;通常客户端连接需要配置证书 解决方…

Hbuilder打包android安装包流程

Hbuilder打包android安装包流程 第一步打开项目文件的manifest.json,在右侧填写具体项目应用信息&#xff0c;每次打包升级前版本号一定要设置的比上版本的高。 点击App图标配置&#xff0c;选择图标资源进行全量生成。 点击菜单”发行”&#xff0c;选择云打包&#xff0c…

十分钟实现 Android Camera2 相机预览

1. 前言 因为工作中要使用Android Camera2 API&#xff0c;但因为Camera2比较复杂&#xff0c;网上资料也比较乱&#xff0c;有一定入门门槛&#xff0c;所以花了几天时间系统研究了下&#xff0c;并在CSDN上记录了下&#xff0c;希望能帮助到更多的小伙伴。 2. Camera2 API …

Lenovo联想Yoga 14s 2021AMD平台ARH版(82LB)原装Win10系统镜像 恢复出厂OEM预装系统

lenovo联想笔记本电脑&#xff0c;Yoga 14s 2021AMD平台ARH版(82LB)原装出厂Windows10系统&#xff0c;原厂OEM预装自带系统镜像 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;I…

轻松掌握财务报表的二十二个知识点

财务报表&#xff0c;一是会看资产负债表。知道所在企业的家底有多厚&#xff0c;都分布在什么地方;二是会看利润表。知道企业赚了多少钱&#xff0c;是盈利还是亏损了&#xff0c;赚钱赚在哪里&#xff0c;亏钱亏到了何地;知道企业总共赚了多少钱。三是会看现金流量表。知道企…

软件测试技能,JMeter压力测试教程,Plugins Manager插件管理器(十三)

前言 前面讲了JDBC连接数据库的时候&#xff0c;需下载mysql对应的jar包&#xff0c;放到lib\ext目录下就可以使用了 jmeter 有个插件管理器Plugins Manager&#xff0c;可以方便的管理其他插件的下载和更新 一、插件管理器Plugins Manager 下载地址&#xff1a;Install ::…

6.28黄金能否守住关键支撑,今日多空如何布局

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周三&#xff08;6月28日&#xff09;亚市盘中&#xff0c;现货黄金窄幅震荡&#xff0c;现交投于1916美元/盎司附近&#xff0c;隔夜公布的美国经济数据强劲&#…

CSS中常用的颜色格式

本文翻译自 Color Formats in CSS&#xff0c;作者&#xff1a;Joshwcomeau。 略有删改 CSS 中的颜色格式可以采用不同的表示方式&#xff0c;包括常用的十六进制、RGB、RGBA、HSL 和 HSLA 等格式。十六进制是最常用的格式&#xff0c;使用 6 个十六进制数字来表示颜色&#xf…

netwox网络工具的使用【网络工程】(保姆级图文)

目录 1. 打开工具功能菜单查看某方面的模块使用搜索功能得到要使用的模块功能编号 查询模块的帮助信息总结 欢迎关注 『网络工程专业』 系列&#xff0c;持续更新中 欢迎关注 『网络工程专业』 系列&#xff0c;持续更新中 温馨提示&#xff1a;对虚拟机做任何设置&#xff0c;…

世界人工智能大会与ICDAR有何不同?

从事人工智能领域的小伙伴对世界人工智能大会和ICDAR应该都不会陌生&#xff0c;它们似乎都是属于研究、讨论人工智能的一种会议&#xff0c;但其实它们的区别还是挺大的&#xff0c;具体来说&#xff0c;它们主要有以下的区别&#xff1a; 一、组织性质不同 ICDAR是Internati…

《计算机系统与网络安全》 第六章 密钥管理

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

viper读取etcd热更新

概述 项目启动肯定少不了配置文件&#xff0c;一般我们会放在单独的目录&#xff0c;例如config中&#xff0c;有yaml、ini、json等等格式&#xff0c;一般用开源的读取相应问的文件映射到结构体中。 但是当一个项目秒杀频繁控制库存和限流策略等、或者其他需要频繁的变更配置…

uniapp app端常见坑

文章目录 uniapp app端常见坑页面内容出现在状态栏数据持久化问题项目初始化跳转登录页闪屏的问题 总结 uniapp app端常见坑 本文主要记录在uniapp-vite-vue3项目app端出现的常见问题 页面内容出现在状态栏 当在page.json设置 “navigationStyle”:“custom” 取消原生导航栏…

Spring进阶学习(附面试快速答法)

文章目录 1、Bean线程安全问题小总结面试快速答法 2、AOP小总结面试快速答法 3、bean的生命周期小总结面试快速答法 4、循环引用小总结面试快速答法 &#xff15;、SpringMVC的执行流程小总结面试快速答法 6、Springboot自动配置原理小总结面试快速答法 7、Spring框架常见注解面…

初步学习使用Mybatis框架

mybatis框架是一款半自动的ORM持久层框架&#xff0c;具有较高的SQL灵活性 所谓半自动的ORM持久层框架&#xff0c;是因为用mybatis进行开发&#xff0c;需要手动编写。而全自动的ORM框架&#xff0c;如hibernate&#xff0c;则不需要编写SQL语句。 对于mybatis&#xff0c;就…

五、云尚办公-菜单管理

云尚办公系统&#xff1a;菜单管理 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布&#xff0c;并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步&#xff01;&#xff01;&#x…

PLC选择指南:西门子还是三菱?

选择适合自己的PLC涉及多个因素&#xff0c;包括项目要求、技术要求、可用性、支持和个人偏好。西门子和三菱是两个知名的PLC制造商&#xff0c;它们都有自己的优势和特点。以下是一些考虑因素&#xff1a; 我这里刚好有plc、嵌入式、单片机的资料需要的可以私我或在评论区扣6…

tp使用layui友好显示修改状态功能

之前找了很多次,然后经过自己的总结,这里记录一下 html部分 <a href"{:url(admin/merchant/make_merchant_erweima,[id>$vo[id]])}" class"layui-btn layui-btn-normal layui-btn-sm ajax-change">二维码</a> 重点是添加上ajax-change的…