• 公共命名空间中的依赖关系


    需求分析

    公共命名空间中包括大量的句子,句子之间有依赖关系。例如,许多操作都需要用到字符串,则字符串操作是基础的。根据分“两步走”的计划,先在公共命名空间中确定语言是什么样子的,再想办法实现计算机语言。这两步和字符集+字体的划分,如出一辙。依赖关系的分析是第二步的开始。

    一个句子作为一个节点,依赖关系的分析的目标,不是画出关系图,而是给它们排队,从复杂的图变成简单的线。

    理论

    首先说表示方式:a->b表示先实现a再实现b,或者说b依赖a。

    节点间关系分为:顺序、分支、循环、合并。

    顺序:a->b, b->c推导出a->b->c
    分支:a->b, a->c推导出a->d, d=(b, c)
    循环:a->b, b->a推导出c=(a, b)
    合并:a->c, b->c推导出d=(a, b), d->c

    d=(b, c), b->a推导出d=(b, c), d->a,把b升格为d

    如果x=(a, b), y=(a, b),则x和y等价

    编码

    如何在计算机中表示a->b->c?用数组
    如何表示d=(a, b, c)?用集合

    ordered[5237]=['a', 'b', 'c']
    unordered[625]={'a', 'b', 'c'}
    
    • 1
    • 2

    5237和625是编号,因为预测公共命名空间会很大,里边的句子排到几千几万都有可能

    用ordered数组记录形如a->b->c的
    用unordered集合记录形如d=(a, b, c)的,编号625就代表d了

    举例1

    有如下依赖关系:
    a->b, b->c, c->d, a->c, b->d
    解:
    由a->b, a->c推导出a->x, x=(b, c)
    因为b属于x,所以,b->c推导出x->c
    由c->d, b->d推导出y->d, y=(c, b)
    a->x->c, y->d发现x等于y
    因为c属于x,所以有a->x->x推导出a->x
    a->x, y->d推导出a->x->d, x=(b, c)
    根据b->c对x内部进行排序,结果不变

    举例2

    已知:a->b, a->c, a->d, a->e, b->c, c->d, c->e
    解:
    a->x, x=(b, c, d, e)
    求x内部关系,取只包括(b, c, d, e)的式子,得:
    b->c, c->d, c->e
    推导出b->c->y, y=(d, e)
    求y内部关系,取只包括(d, e)的式子,得空集
    y的内部得空集,无需处理,停
    所有集合都停止时就停止

    举例3

    已知:a->c, a->d, b->d, b->e
    解:
    a->x, x=(c, d), b->y, y=(d, e)
    在x, y中都有d,合并x, y得z=(c, d, e)
    a->z, b->z
    得t->z, t=(a, b), z=(c, d, e)

  • 相关阅读:
    LeetCode220801_65、寻找两个正序数组的中位数
    人工智能--目标检测
    GO|经典错误之回车与\n
    Docker安装并使用Mysql(可用详细)
    MyBatis Generator 代码生成工具
    工薪族创业方案
    通过怪物展示Demo理解游戏设计模式中的迭代器模式
    【踩坑记】如何解决前端调试无法显示正确的soureceMap映射,并且无法在控制台断点调试的问题
    DCMM数据管理能力成熟度等级划分
    Leetcode 118 杨辉三角
  • 原文地址:https://blog.csdn.net/proorck2019/article/details/127713988