数据结构(C):大砖小房子,还是小砖大房子?

Data structures (C): big bricks small house, or small bricks big house?

假设我有一个 C 库,用于从 brick 中构建 house。与每个 brick 相关联的是一组 doubles 和 ints,对应于它的尺寸、重量、颜色以及它来自哪批货物等。house 是然后只是某种形式的有组织的积木收集。我的房屋建筑库中的一些功能接收 house,但大多数接收并运行 brickshouse 主要使用本地 brick-wise 操作构建,对应于 adding/removing 一块砖头等本地更改。

在我(软弱、缺乏经验)看来,有两种“自然”的方式来表示这种 house-made-of-bricks 的数据结构设置。

做法一:大透明砖,小房子。让每个 brick 结构包含每个关联的 doubles 和 ints 的字段,以及指向紧邻它的砖块的指针。在此设置中,与 house 相比,每个 brick 都是一个大结构(house 可以想象只是指向任何 brick 的指针),整个事情是只是一大堆指针。

方法二:小不透明砖,大房子。让每个 brick 只包含一个整数 index 和一个指向其所属 house 的指针; house 然后包含 doubles 和 ints 的数组,bricks 可以切入这些数组以获取它们的数据,再加上一些额外的 arrays/tables所有连接信息。通过这种方法,无论我们在代码中的什么位置,都可以使用大型 house 结构来保存和管理资源,每个 brick 都可以看到该结构。

问题:在什么情况下(如果有)方法 1 优于方法 2?

我非常喜欢方法 2,但很难准确说明是什么使它在客观上 比方法 1 更好。在此先感谢您的任何建议 and/or 指向适当阅读的指针 material。关于如何更好地表达我的问题的建议也非常受欢迎:)

正如其他人所指出的,您正在描述一个图问题,并询问用哪种方法来表示这个图。但是,您的问题没有指定您要实现的应用程序。以下是我想到的几种情况:

1) 应用程序更关心房子而不是每一块砖:例如,你想计算房子的某些指标,大部分砖来自哪里,房子的最终尺寸是多少,那么第二种方法将更能代表您要解决的问题。因此更容易实施和维护。

2) 将积木视为独立实体至关重要。该应用程序更关心删除、移动或更一般地在砖块级别而不是房屋级别上进行操作。那么第一种方式更合适

您提出了两个极端,但可能也有介于两者之间的方法。例如,您可以将邻接信息存储在房屋中,但将有关颜色、重量、大小和来源的信息保存在砖块中。您还可以将源信息从 house 和 brick 结构中移出,并将其放入单独的结构中,例如表示源并包含指向砖的指针列表的结构。

你不能说 objective 哪种方法更好,直到你说出你想要优化的目标。阿德米已经提到了两个可能的目标,但可能还有更多。 然后问题也是您要优化的参数:它是性能吗?代码大小?运行时内存使用情况?代码清晰度?

一旦您定义了您的目标,并且您有两个或更多的替代实现可供选择,您可以尝试实现所有这些,然后对它们进行基准测试。这会给你最多的 objective 答案。