【发布时间】:2019-08-06 12:06:22
【问题描述】:
编辑要求 6 并添加新要求
6) 正好 4 列/行的度数必须为 3。
7) 没有两个度数为 3 的顶点彼此相邻。
我的目标:
生成并保存满足特定要求的所有矩阵。然后将每个矩阵与之前手动输入的其他矩阵进行比较,以检查特定的相似性。如果有人认为这会有所帮助,我可以添加更多细节。我相信我已经整理出了代码的比较方面,所以我正在等待矩阵生成部分。我需要为多种尺寸执行此操作,但我将把这个问题集中在 10x10 的情况上。
具体要求:
1) 必须是 10x10 矩阵(表示 10 个顶点上的图)。
2) 必须是对称的(表示邻接矩阵)。
3) 对角线为 0(无循环)。
4) 只有 1 和 0(简单图)。
5) 整个矩阵必须正好有 48 个 1(图有 24 条边)。
6) 每列/行必须有 3 个或 6 个 1(每个节点为 3 或 6 级)。
应用:
我正在调查一个猜想,并相信我已经提出了一个可能的解决方案,可以将猜想分解成更小的部分,并可能证明某些方面。我想用蛮力来证明我的想法是否适用于一个小的特定案例。还具有适当的基本代码可以允许将来修改以测试其他可能的案例或想法。
想法和思考过程:
- 我使用图表的边缘来手动输入我的比较集。例如:
G9=graph([1 1 1 2 2 3 4 4 4 5 5 6 6 6 6 3 3 9 2 2 2 7 7 8],[2 3 4 3 4 4 5 6 7 6 7 7 3 9 10 9 10 10 7 8 9 8 9 9]);
- 我认为这是唯一一个符合前面列出的要求的图,直到同构。
- 我最初的想法是创建满足给定条件的可能矩阵,然后将它们与我的比较集进行比较。我仍然认为这是最好的方法。
- 我愚蠢地尝试生成随机矩阵,完全忽略了大量的可能性。使用 while 循环,我首先生成了一个满足前四个要求的随机矩阵。然后在单独的嵌套 for 语句中,我使用 numedes() 检查了要求 5,使用 all(mod(degree())) 检查了要求 6。出于几个相当明显的原因,这是一种糟糕的方法,但我在这个过程中学到了很多东西,这让我找到了应该进行最终比较的代码。
- 这是我第一次使用 Matlab,所以我边走边学。我已经在这个代码上工作了将近 2 周,不知道我想出的是否“好”,但我为自己能够做到的事情感到自豪。我已经到了需要一些外部建议的地步。我愿意接受任何建议和任何程度的帮助。引用源、功能建议、另一种方法或具有“即插即用”代码的完整解决方案将不胜感激。我不回避为实现我的目标而付出的努力。 我很感激任何反馈。
【问题讨论】:
-
我不是数学家,我不确定您所说的要求 2 是什么意思,但也许可以利用它来减少问题...
-
我仍在努力缩短计算时间,但与此同时,我认为我至少有 一个 解决方案可以满足您的限制并且不是与您的同构:
([1 1 1 2 2 5 3 5 6 3 5 6 7 4 5 6 7 8 4 5 6 7 8 9],[2 3 4 5 6 6 7 7 7 8 8 8 8 9 9 9 9 9 1 0 1 0 1 0 1 0 1 0 1 0]). -
如果您有 24 条边,并且所有节点的度数为 3 或 6,则唯一有效的配置是具有 4 个度数为 3 的节点和 6 个度数为 6 的节点。(这是方法之一我加快了我的功能。)但是,您可以在来自 3 级节点的 K_4 子图中有节点。只是不是所有的,除非你被允许有断开的子图。
-
这让我意识到我并没有限制我的函数只生成连接图。 :)
-
我基本上是在使用蛮力/回溯来仅生成有效的图形并进行了一些优化。首先,我们知道对于 10 个节点的情况,我们需要 4 个度数为 3 的节点和 6 个度数为 4 的节点。我将节点 1-4 的度数固定为 3,将节点 5-10 的度数固定为 4,因为任何具有不同分布的图都与我的图同构。其次,我认为与下面的@peterfranciscook's answer 类似,在为行/列
p选择组合后,问题将简化为n-p节点的较小图。
标签: matlab matrix while-loop graph-theory adjacency-matrix