依赖图的环形检测,非环有向依赖图的子集的依赖检测

【信息科学与工程学】【数据中心】第三十二篇 云数据中心网络拓扑参数全息模型 多维度集成:物理、二维、三维、几何、连接拓扑的有机统一强约束网络:空间、承重、散热、供电、布线等多重物理约束复杂关系网络:互斥、相似、联动、依赖关系交织多目标优化:成本、性能、可靠性、可扩展性的权衡自动化设计:参数化建模,自动化验证,智能化优化实际工程应用中,建议:建立参数化设计模板库实现多约束自动化验证采用分层协同优化策略构建数字化孪生验证环境持续迭代优化设计规则通过系统化的参数管理,可以实现数据中心网络拓扑的科学设计、高效部署和智能运维。多维度参数:地理、物理、拓扑、性能、成本等千余参数。 阅读详情
class Item {
    private String name;
    private int helperInfo;

    public Item() {
        this.helperInfo = 0;
    }

    public Item(String name) {
        this.name = name;
        this.helperInfo = 0;
    }

    public Item(Item item) {
        this.name = item.getName();
        this.helperInfo = item.getHelperInfo();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getHelperInfo() {
        return helperInfo;
    }

    public void setHelperInfo(int helperInfo) {
        this.helperInfo = helperInfo;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Item item = (Item) o;
        return name != null ? name.equals(item.name) : item.name == null;
    }

    @Override
    public int hashCode() {
        return name.hashCode();
    }
}

public static ArrayList<Item> vertex = new ArrayList<>();

public void genVertex() {
    Item a = new Item("A");
    Item b = new Item("B");
    Item c = new Item("C");
    Item d = new Item("D");
    Item e = new Item("E");
    Item f = new Item("F");

    vertex.add(a);
    vertex.add(b);
    vertex.add(c);
    vertex.add(d);
    vertex.add(e);
    vertex.add(f);
}

//public ArrayList<ArrayList<Item>> edgeArr = new ArrayList<>();
public static int[][] arr = new int[6][6];

public static int circleCount = 0;

public static Map<Item, Set<Item>> itemMap = new HashMap<>();

public void genCircleEdge() {
    for (int i = 0; i < 6; i++) {
        for (int j = 0; j < 6; j++) {
            arr[i][j] = 0;
        }
    }
    arr[0][1] = 1;
    arr[1][2] = 1;
    arr[2][4] = 1;
    arr[3][4] = 1;
    arr[4][0] = 1;
    arr[4][5] = 1;
    arr[5][1] = 1;
    arr[5][3] = 1;
}

public void genNoCircleGraph() {

    for (int i = 0; i < 6; i++) {
        for (int j = 0; j < 6; j++) {
            arr[i][j] = 0;
        }
    }
    arr[0][1] = 1;
    //arr[1][2] = 1;
    arr[2][4] = 1;
    //arr[3][4] = 1;
    arr[4][0] = 1;
    arr[4][5] = 1;
    arr[5][1] = 1;
    arr[5][3] = 1;

}

public int getVertexIndex(Item item) {
    int ret = -1;
    int size = vertex.size();
    for (int i = 0; i < size; i++) {
        if (vertex.get(i).getName().equals(item.getName())) {
            ret = i;
            break;
        }
    }
    return ret;
}

public void trimStringBuffer(StringBuffer stringBuffer) {
    int lastIndexOfArray = stringBuffer.lastIndexOf("->");
    int maxIndexOfString = stringBuffer.length();
    stringBuffer.delete(lastIndexOfArray, maxIndexOfString);
}



public void depthTraverse(ArrayList<Item> bussinessList, ArrayList<Item> workStack, Item curItem,
                          StringBuffer stringBuffer, Set<Item> dependencySet) {
    if (workStack.size() == 0) {
        return;
    }

    int row = bussinessList.indexOf(curItem);
    System.out.println("row:" + row);


    int childrenCount = 0;
    int businessSize = bussinessList.size();
    for (int i = 0; i < businessSize; i++) {
        if (arr[row][i] == 1) {
            workStack.add(bussinessList.get(i));
            childrenCount++;
        }
    }

    System.out.print("top ");
    for (int i = workStack.size() - 1; i >= 0; i--) {
        System.out.print(workStack.get(i).getName() + ",");
    }
    System.out.println(" bottom");

    if (childrenCount == 0) {
        System.out.println("dependecyChain: " + stringBuffer.toString());
        String dependencyChain = stringBuffer.toString();
        String[] dependecyItems  = dependencyChain.split("->");
        int length = dependecyItems.length;
        for(int i = 0; i < length; i++ ) {
            Item item = new Item(dependecyItems[i]);
            dependencySet.add(item);
        }
    }

    for (int j = 0; j < childrenCount; j++) {
        int lastIndex = workStack.size() - 1;
        Item priorItem = workStack.get(lastIndex);
        workStack.remove(priorItem);
        if (priorItem.helperInfo == 0) {
            priorItem.helperInfo = 1;
            stringBuffer.append("->" + priorItem.getName());
            depthTraverse(bussinessList, workStack, priorItem, stringBuffer, dependencySet);
            trimStringBuffer(stringBuffer);
        } else if (priorItem.helperInfo == 1) {
            stringBuffer.append("->" + priorItem.getName());
            int beginIndex = stringBuffer.indexOf(priorItem.getName());
            int tailIndex = stringBuffer.lastIndexOf(priorItem.getName());
            if (tailIndex > beginIndex) {
                String circleBegin = stringBuffer.substring(beginIndex);
                System.out.println("circle:" + circleBegin);
                circleCount++;
            } else {
                depthTraverse(bussinessList, workStack, priorItem, stringBuffer, dependencySet);
            }
            trimStringBuffer(stringBuffer);
        }
    }

    curItem.helperInfo = 1;
}

public int checkCircle() {

    int size = vertex.size();
    ArrayList<Item> bussinessList = new ArrayList<>();
    for (int i = 0; i < size; i++) {
        Item item = vertex.get(i);
        Item newItem = new Item(item);
        bussinessList.add(newItem);
    }

    ArrayList<Item> workStack = new ArrayList<>();
    StringBuffer stringBuffer = new StringBuffer();

    for (int i = 0; i < size; i++) {
        Item item = bussinessList.get(i);
        workStack.clear();
        stringBuffer.delete(0, stringBuffer.capacity());
        Set<Item> dependencySet = new HashSet<>();
        if (item.helperInfo != 1) {
            workStack.add(item);
            stringBuffer.append(item.getName());
            depthTraverse(bussinessList, workStack, item, stringBuffer, dependencySet);
        }
    }

    System.out.println("all circle:" + circleCount);

    return circleCount;

}

public void genDependencyChain() {

    circleCount = 0;
    checkCircle();
    if(circleCount != 0) {
        return;
    }

    int size = vertex.size();
    ArrayList<Item> bussinessList = new ArrayList<>();
    for (int i = 0; i < size; i++) {
        Item item = vertex.get(i);
        Item newItem = new Item(item);
        bussinessList.add(newItem);
    }

    ArrayList<Item> workStack = new ArrayList<>();
    StringBuffer stringBuffer = new StringBuffer();

    for (int i = 0; i < size; i++) {
        Item item = bussinessList.get(i);
        workStack.clear();
        stringBuffer.delete(0, stringBuffer.capacity());
        Set<Item> dependencySet = new HashSet<>();
        workStack.add(item);
        stringBuffer.append(item.getName());
        depthTraverse(bussinessList, workStack, item, stringBuffer, dependencySet);
        dependencySet.remove(item);
        itemMap.put(item, dependencySet);
    }
}

public void downloadBussiness(Set<Item> itemHashSet) {

    Iterator<Item> iterator = itemHashSet.iterator();

    while (iterator.hasNext()) {
        Item it = iterator.next();
        boolean dependencyOk = true;

        Set<Item> dependencySet  = itemMap.get(it);
        if(dependencySet != null) {
            Iterator<Item> diter = dependencySet.iterator();
            while(diter.hasNext()) {
                Item dependencyItem = diter.next();
                if(!itemHashSet.contains(dependencyItem)) {
                    System.out.println("item:" + it.getName() + " need " + dependencyItem.getName());
                    dependencyOk = false;
                }
            }
        }

        if(dependencyOk) {
            System.out.println("item:" + it.getName() + " can be download");
        }
    }
}

@Test
public void testCircle() {
    genVertex();
    genCircleEdge();
    checkCircle();
}

@Test
public void testDownLoadBusiness() {
    genVertex();
    genNoCircleGraph();
    genDependencyChain();

    Set<Item> itemHashSet = new HashSet<Item>();
    itemHashSet.add(new Item("A"));
    itemHashSet.add(new Item("D"));
    itemHashSet.add(new Item("C"));
    downloadBussiness(itemHashSet);

}

检查环使用的时候每个子孩子的深度遍历,使用模拟的栈
testCircle 结果输出:
row:0
top B,A, bottom
row:1
top C,A, bottom
row:2
top E,A, bottom
row:4
top F,A,A, bottom
row:5
top D,B,A,A, bottom
row:3
top E,B,A,A, bottom
circle:E->F->D->E
circle:B->C->E->F->B
row:0
top B,A, bottom
circle:B->C->E->A->B
all circle:3

Process finished with exit code 0

testDownLoadBusiness 输出结果:

row:0
top B,A, bottom
row:1
top A, bottom
dependecyChain: A->B
row:2
top E,C, bottom
row:4
top F,A,C, bottom
row:5
top D,B,A,C, bottom
row:3
top B,A,C, bottom
dependecyChain: C->E->F->D
row:1
top A,C, bottom
dependecyChain: C->E->F->B
row:0
top B,C, bottom
row:1
top C, bottom
dependecyChain: C->E->A->B
all circle:0
row:0
top B,A, bottom
row:1
top A, bottom
dependecyChain: A->B
row:1
top B, bottom
dependecyChain: B
row:2
top E,C, bottom
row:4
top F,A,C, bottom
row:5
top D,B,A,C, bottom
row:3
top B,A,C, bottom
dependecyChain: C->E->F->D
row:1
top A,C, bottom
dependecyChain: C->E->F->B
row:0
top B,C, bottom
row:1
top C, bottom
dependecyChain: C->E->A->B
row:3
top D, bottom
dependecyChain: D
row:4
top F,A,E, bottom
row:5
top D,B,A,E, bottom
row:3
top B,A,E, bottom
dependecyChain: E->F->D
row:1
top A,E, bottom
dependecyChain: E->F->B
row:0
top B,E, bottom
row:1
top E, bottom
dependecyChain: E->A->B
row:5
top D,B,F, bottom
row:3
top B,F, bottom
dependecyChain: F->D
row:1
top F, bottom
dependecyChain: F->B
item:A need B
item:C need B
item:C need E
item:C need F
item:D can be download

Process finished with exit code 0




【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营04 典型值:λ1​∈[−0.02,−0.01], λ2​∈[−0.01,0], η1​,η3​∈[0.1,0.3], η2​,η4​∈[0.05,0.15]参数:δ1​∈[−0.8,−0.3], δ2​∈[−0.5,−0.2], δ3​∈[−0.4,−0.1], δ4​∈[−0.6,−0.2]参数:φ1​∈[0.1,0.3], φ2​∈[−0.2,−0.05], φ3​∈[−0.1,0.1], φ4​∈[−0.3,−0.1]参数:α∈[0.3,0.6], β∈[0.2,0.4], γ∈[0.01,0.03] 阅读详情

相关推荐

【信息科学与工程学】【物理/化学科学和工程技术】知识体系87——声学基础02 应用声学

编号类型领域问题问题的数学分析参数列表及常量/常数及参数的数值范围关联知识1技术应用应用声学如何利用超声波反射测量距离?设发射脉冲与接收回波的时间差为 Δt,声速为 c,则目标距离 d = c·Δt / 2。c ≈ 340 m/s (空气中,20°C);Δt 通常为 0.1 ms ~ 100 ms;d 对应范围约 0.017 m ~ 17 m。声波传播、反射定律、压电换能器、时延估计2现象分析应用声学为什么在音乐厅中某些位置听到的声音更清晰?声压级叠加:总声压级 Lp = 10 log₁₀(Σ 10^(Lp

weixin_49199313的博客 218

depends动态库依赖检查

查看动态库实际的依赖关系。便于找出动态库位置错误或者版本错误。

【信息科学与工程学】【数据科学】 第四十四篇 数据湖 系列二 函数库01

2. 近似最近邻搜索(ANN): 通过HNSW等图索引模型加速,模型定义为构建一个层次化导航小世界图。依赖于消息队列(Kafka/Pulsar)、分布式文件系统(HDFS/S3)的客户端及连接库。依赖专门的向量检索库(如FAISS, Milvus)。管控目标: 召回率(Recall@K) > 95%,查询延迟 < 100ms。管控目标: < 1% (核心业务字段) 或 < 5% (一般字段)依赖数据处理框架(如Spark, Pandas)的核心统计函数。,通过牺牲精确性(ANN)来换取搜索速度的大幅提升。

weixin_49199313的博客 346

算法--- 检测循环依赖

1. 题目 参考链接: 检测循环依赖 现有n个编译项,编号为0 ~ n-1。给定一个二维数组,表示编译项之间有依赖关系。如[0, 1]表示1依赖于0。 若存在循环依赖则返回空;不存在依赖则返回可行的编译顺序。 2. 题解 若给定一个依赖关系是[[0,2],[1,2],[2,3],[2,4]],如图所示 可以看出,它们之间不存在循环依赖。 可行的编译序列是[0,1,2,3,4],也可以是[1,0,2,4,3]等。 拓扑排序可以求这样的一个序列。可以看出,这个序列结果可能不唯一。 拓扑排序算法过程: 选择图

知北行的博客 5786

【信息科学与工程学】计算机科学与自动化——第二十篇 计算机体系架构 系列二 约束条件01

编号类型领域子领域问题问题的数学分析算法逐步推理思考的数学表达式及参数列表及约束方程组及参数列表及边界条件及范围关联知识1计算架构计算机体系结构指令集架构 (ISA)ISCA(指令集计算机架构)的性能分析与优化采用经典执行时间模型与Amdahl定律,结合指令级并行(ILP)和流水线效率,建立包含指令计数、CPI、时钟周期的数学关系。考虑存储层次与分支预测的影响,引入概率论与排队论分析延迟。1. 执行时间 T=N⋅CPI⋅tclk​。

weixin_49199313的博客 93

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1272

图的拓扑排序

转载文章 原文链接: dzone 翻译: ImportNew.com - 陈 秋林 译文链接: http://www.importnew.com/9719.html [ 转载请保留原文出处、译者和译文链接。] 感谢作者的奉献精神; 介绍 假设我们有一组任务要完成,并且有些任务要在其它任务完成之后才能开始,所以我们必须非常小心这些任务的执行顺序。 如果这些任务的执行

chenqiangdage的专栏 1525

【信息科学与工程学】【数据科学】 第四十四篇 数据湖 系列二 函数库02

加法模型: y(t) = g(t) + s(t) + h(t) + ε_t,其中g(t)为趋势项,s(t)为季节项,h(t)为节假日效应,ε_t为误差。管控目标: 写入延迟低,数据一致,不丢失。将新模型与当前生产模型并行运行,新模型接收同样的输入并产生预测,但不影响实际业务决策,仅用于收集性能数据进行比较。在数据加工任务运行时,实时捕获任务执行产生的血缘信息,并更新到血缘图,实现血缘的准实时同步。溯源深度: 可配置。将数据血缘图中的节点(如数据中心、云区域)映射到实际地理位置,在地图上展示数据的流动路径。

weixin_49199313的博客 291

依赖注入的三种方式和循环依赖的产生

说白了就是对象之间的依赖关系成环例如A->B,B->C,C->A,并不限于对象的多少,最终成环就是循环依赖,也因此循环依赖的发生可能是十分复杂的。,如果使用属性注入的话,开发过程中甚至很难察觉。循环依赖会为系统带来很多意想不到的问题,下面我们来简单讨论一下一、换句话说就是牵一发而动全身,想象一下平静的湖面落入一颗石子,涟漪会瞬间向周围扩散。循环依赖形成了一个环状依赖关系, 这个环中的某一点产生不稳定变化,都会导致整个环产生不稳定变化实际的体验就是。

qq_37436172的博客 2299

【信息科学与工程学】【通信工程】第一百五十五篇 网络拓扑学09

聚焦云数据中心(多region多AZ+多边缘DC)与城域网5G/6G网络一体化的拓扑学编号类型领域问题问题的数学分析(拓扑学+其他)参数列表及参数的数值范围关联知识A166图论/组合优化云原生数据湖如何用Apache Hudi的Timeline拓扑优化增量查询?​1. 拓扑学分析(详细): - 拓扑结构:Apache Hudi使用Timeline管理表的历史变更,Timeline是一个时间轴上的DAG。每个Instant(提交、 compaction、 cleaning等)是一个节点,节点之间按时间顺

weixin_49199313的博客 222

【信息科学与工程学】【数据中心】 第十九篇 MFU的优化提升方法03

等级模块类型子模块子子模块功能描述MFU影响因子优化优先级L0​算术逻辑单元(ALU)标量ALU整数ALU标量整数运算α_int = 0.1-0.3中浮点ALU标量浮点运算α_fp_scalar = 0.2-0.4中向量处理单元(VPU)SIMD单元128-bit SIMD短向量运算β_SIMD128 = 0.3-0.6高256-bit SIMD中向量运算β_SIMD256 = 0.4-0.7高512-bit SIMD长向量运算β_SIMD512 = 0.5-0.8极高矩阵处理单元(MPU)Tensor C

weixin_49199313的博客 1011

Dependent Managent(环形依赖)

软件开发有两种依赖方式: 一种是编译时依赖,就是在b.h文件中添加#include“a.h” 第二种是链接时依赖,是指生成的目标文件a.o在查找可用符号时要去别的目标文件中去查找。例如,在a.h中存在extern int n;那么在生成的a.o文件里就需要去别的目标文件中查找n的定义,这就构成了链接时依赖。 假定存在两个类CLASS A  CLASS B.(在UML中,依赖关系用------

kkk328的专栏 2225

【信息科学与工程学】计算机科学与自动化——第二十篇 计算机体系架构00

路径选择与流量调度是网络优化中的核心环节,它们通过一系列算法来提升网络效率、降低延迟,并有效利用资源。

weixin_49199313的博客 804

Network on Chip (NOC) -- 路由与死锁

任何允许通道依赖成环的路由都可能死锁,而死锁一旦发生就是灾难性的(几个包占住资源不放,其他包全堵在它们后面,整网瘫痪)。这一章的主线就是"如何设计既高效又不死锁的路由"。把"谁占着谁、谁等着谁"画成图,图里有环 = 可能死锁。路由按"是否感知网络状态"分三类:确定型(deterministic,如 XY 维序路由 DOR,一对源目的永远走同一条路)、无关型(oblivious,如 Valiant 随机路由,不看拥塞随机选路)、自适应(adaptive,看拥塞动态选路)。避免死锁的统一原理是资源排序限制路由。

weixin_51770598的博客 480

【信息科学与工程学】【安全领域】第七十篇 负载均衡设备的主要算法01

每个服务器有一个对槽位的偏好排序, 调度器(表)需要为每个槽位分配一个服务器, 目标是整体上满足所有服务器的偏好(即均匀填充), 同时保持稳定性(变化小)。: 对于一个新到达的请求, 如果将其分配到当前有cj个请求(包括正在服务的)的服务器sj, 其期望等待时间为 (cj + 1) / μj。输入:服务器集群S={s1, s2, ..., sn}, 权重W={w1, w2, ..., wn}, 当前指针i。输出:选中的服务器sj。输入:服务器集群S, 各服务器当前活动连接数cj, 各服务器预设权重wj。

weixin_49199313的博客 524

【信息科学与工程学】【通信工程】第一百五十五篇 网络拓扑学01

对于无向图,GCN层定义为:H^{(l+1)} = σ(Â H^{(l)} W^{(l)}),其中Â = D^{-1/2} A D^{-1/2}。),其中A = λ/μ为话务量(Erlang),λ为呼叫到达率,μ为服务率。* 给定物理网络G_s=(V_s,E_s)和虚拟网络G_v=(V_v,E_v),寻找映射M: V_v→V_s, E_v→路径集,使得资源约束满足。* 流量过程A(t) = mt + √(am)·B_H(t),其中m为平均速率,a为方差系数,B_H(t)为Hurst参数为H的分数布朗运动。

weixin_49199313的博客 50

模板驱动型文档自动化:用结构化模板替代手动排版

文档自动化是企业内容生产提效的核心路径,其本质在于将重复性格式操作转化为可复用、可验证、可演进的结构化规则。基于模板引擎的实现方式,通过样式层、结构层与逻辑层三层解耦,支持条件渲染、上下文感知变量绑定和Git式版本管理,显著提升合规性、一致性和交付速度。相比传统Word宏或简单邮件合并,该技术更强调业务语义建模与工程化治理,适用于产品说明书批量生成、咨询方案快速定制及法务合同动态更新等高价值场景。Sqribble正是这一范式的典型实践。

cunfuxiao7305的博客 507

python自动交易 缠论_缠论自动交易系统实现了

一、缘起:缠中说禅的伟大,我想你只要上网搜索一下就知道了,他的才气不用我说,我只想说说他的《教你炒股票》系列文章,108篇文章,将他的股票操盘秘籍全部公开给广大的股友了,更有缠友将其理论写成公式,在网上也是广为流传,深受广大缠友们的喜爱。我也是缠中说禅的忠实崇拜者之一,从2008年开始每天都使用缠论来看盘,特别想将缠论写成交易系统,让计算加来帮助我们自动交易,从而减轻我们盯盘的辛劳,可是苦于没有好...

weixin_39970689的博客 4637
上一篇: 可以多关注的blog
ema_love_code
博客等级 码龄20年 3粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值