【离散】画哈斯图--最好理解绝不会出错

离散数学哈斯图的画法

两个步骤:
第一步:排点的层数
第二步:把有关系的点连接起来

看一道题:

A={1,2,3,4,6,8,9},偏序集S={A,《 },其中为整除关系,请画出S的哈斯图

首先把他们的所有的关系列出来(后面的数可以整除前面的数,这两个数就有整除的关系)

<1,2> <1,3> <1,4> <1,6> <1,8> <1,9>

<2,4> <2,6> <2,8>

<3,6> <3,9>

<4,8>

然后来排点的层数。

首先看,所有关系里面不在值域的元素有哪几个:最先找到的是1

所以我们把1放到第一层

在这里插入图片描述

然后我们删掉<1,x>的所有元素(之后就不考虑那些元素)

<1,2> <1,3> <1,4> <1,6> <1,8> <1,9>

<2,4> <2,6> <2,8>

<3,6> <3,9>

<4,8>

继续找(没被加入哈斯图的)不出现在值域的元素,我们找到了2,3,那么把2,3放在第二排.
在这里插入图片描述同样删除<2,x>和<3,x>的所有元素

<1,2> <1,3> <1,4> <1,6> <1,8> <1,9>

<2,4> <2,6> <2,8>

< 3,6> < 3,9>

<4,8>

这时不出现在值域且没被加入哈斯图的元素有4,6,9。那么把4,6,9放到第三排。
在这里插入图片描述

最后还剩下8,那么把8放在第四排。
在这里插入图片描述

现在我们点的排序就排好了。

最后把每一层之间有关系的点连起来就好了。

⚠️注意,这里每一层只会和上一层相连,不会跨两层连。
在这里插入图片描述
有帮助的话就给我点个赞吧!
5个赞更新极大极小元。

更新一下极大极小元:
极小元就是 没有元素比它小
如果有的关系只有它自己 那么也是极小的 那也是极小元
极大元同理 :)


楼主最近在准备保研 要复习专业课内容

大家如果有什么想看的科目也可以评论我 (毕竟我都会复习到)

### 绘制离散数学中的哈斯图 #### 定义与基本概念 哈斯图用于直观展示有限偏序集的结构。这种图表仅显示覆盖关系,即如果存在一条路径从节点 \( x \) 到另一个节点 \( y \),并且在这两点之间不存在其他任何中间点,则认为 \( x \) 覆盖 \( y \)[^3]。 #### 构建过程详解 为了构建给定偏序集中元素之间的哈斯图- **确定集合成员**:首先识别出所有参与比较的对象组成的集合\( A \)。 - **建立二元关系矩阵**:对于任意一对不同的元素\( (x, y) ∈ A × A \),判断是否存在这样的条件使得\( x ≤ y \)成立;这里使用的符号取决于具体的应用场景,在整除的例子中就是指\( x | y \)(读作"x 整除 y")。 - **提取直接前驱/后继对**:遍历上述得到的关系表,寻找那些满足严格小于等于但又没有其它更小值介于其间的情况——这些便是所谓的“覆盖”。 - **布局绘图**: - 将较小者放在较低位置; - 较大者置于上方; - 使用直线连接每一对具有直接前后顺序关联性的顶点; - 如果某个元素既不是最大也不是最小,则它应该位于上下层之间适当的高度上以保持层次分明。 下面给出一个具体的Python实现来帮助理解这一流程: ```python import networkx as nx from matplotlib import pyplot as plt def draw_hasse_diagram(divisors): G = nx.DiGraph() # Add nodes and edges based on divisibility relation. for i in divisors: for j in divisors: if i != j and not any(i % k == 0 and k % j == 0 for k in set(divisors)-{i,j}): if i % j == 0 or j % i == 0: G.add_edge(min(i, j), max(i, j)) pos = {node:(divisors.index(node)%len(divisors)//2,-divisors[::-1].index(node))for node in G.nodes()} fig, ax = plt.subplots(figsize=(8,6)) nx.draw(G,pos=ax.get_position(),with_labels=True,node_size=500,node_color='lightblue',font_weight="bold",arrows=False) plt.show() # Example usage with factors of number 54. draw_hasse_diagram([d for d in range(1,55)if 54%d==0]) ``` 此代码片段利用`networkx`库创建了一个有向无环图(DAG),并通过matplotlib进行了可视化呈现。注意这里的边方向是从下往上指向更大的数,这符合传统意义上的哈斯图法。
评论 74
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妮妮学姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值