【问题标题】:Datastructure is best for rules like Item can not be Shipped to a particular postalCode数据结构最适用于物品不能运送到特定邮政编码等规则
【发布时间】:2023-12-02 17:01:02
【问题描述】:

我有一个运输限制表,其中包含以下规则:
ProductClass:“Suites”无法运送到“Georgia”,
ProductClass:'Body Spray' 和 Hazmat:True 不能运送到邮政编码:322001
ProductClass:“婴儿玩具”无法运送到“美国”,
而且我们有一条规则,例如,我不能将任何物品运送到“亚利桑那”州。

ProductClass、Hazmat 和 ShippingMethod 是一组(零个或多个属性可以有值)。
同样,邮政编码、州、国家是另一组(每条规则只有一个填充值)。
这是配置/静态数据,它会很大(超过 10k 条规则)

RuleId Product Class Hazmat ShippingMethod Postal Code State Country
1 Suits Georgia
2 Body Spray TRUE 322001
3 Body Spray 322009
4 Baby Toys US
5 Guns Florida
6 Air Hawaii
7 Arizona

现在我收到了 3 件商品的订单,例如:
项目 1:ProductClass 'Suits',危险品:false,ShippingMethod:'ByAir',邮政编码:322002,状态:'Texas'
项目 2:ProductClass 'Guns',危险品:false,ShippingMethod:'ByAir',邮政编码:322009,州:'Texas'
第 3 项:ProductClass 'Baby Toys',危险品:false,ShippingMethod:'ByAir',邮政编码:322011,州:'Florida'

期望是一个订单可以包含 5 到 15 个项目。
当我收到订单时(在我的示例中,我收到了包含 3 件商品的订单),我需要通过上面配置的所有这些限制规则运行,如果一个项目有一个/多个限制规则匹配,则需要记录它们。

在 Java 中实现这一目标的最佳算法是什么。

【问题讨论】:

  • 不要关闭这个帖子,如果你们不明白的问题,请告诉我,请告诉我哪部分不明白,我会尽量详细说明。

标签: java algorithm data-structures graph-algorithm recursive-datastructures


【解决方案1】:

鉴于限制表有 10k 项,第一个问题是您预计需要处理多少订单。

如果这个数字比较小,那就只运行每一项,看看有没有符合你需要的行。

但是,如果这个数字非常大,那么事先进行一些预处理并将限制表转换为某种数据结构,以便于检查项目是有意义的。

(我)想到的第一个数据结构是一个嵌套对象,其中包含一个列作为属性。 然后那些以另一列作为属性保存更多嵌套对象。

基本上这将允许每一行检查对象中的多个属性,而不是在 10k 项的数组中查找一行。

【讨论】:

  • 我可以使用任何算法,如树/图来避免迭代次数。
  • 这个数据结构本质上是一棵树。这将使您花费“h”成本来检查“h”是树的高度(即列数)的每条记录
  • 能否请您说明如何表示数据,无法查看。
  • 表格中的空单元格是什么意思?
  • 没有该特定单元格的数据。