寻找最便宜的产品配置的算法
数据结构不明显,需要解释。我们必须遵循以下模型:
库存商品-表示真正唯一的对象项(例如:任何给定的HDD及其序列号和购买价格)。每个stock\u项目的数量为0或1,stock\u价格为0或更多。一个stock\u项目必须仅与一个商品类型的产品绑定
产品-表示产品的定义,而不是像stock\u items这样的真实对象(例如:像Seagate Exos HDD这样的HDD型号)。在我们的模型中,它可以有3种基本类型:
- 商品
- “组”
- 配置
商品是与stock\u项目绑定的简单对象。两种商品之间不存在任何关系。商品库存数量是绑定到此产品的所有库存项目的库存数量之和。
组可以由商品、其他组组成,并且不能包含配置。组的库存量是组成员的库存量之和。在我们的模型中,组的含义是它是一组类似的产品(一个可以替代另一个)。
配置可以由商品、组和/或配置组成。配置中的每个项目可以有1个或多个数量。我们模型中的配置表示一组具有某些功能意义的产品(例如:PC是一种配置,它可以从一组RAM DDR4 32GB中取出任何4种商品,并从一组SATA SSD 512GB 2.5中取出2个HDD。这些组由相互兼容的不同商品组成。我们需要以与其他产品类型相同的方式显示配置的库存数量。
现在我们面临的问题是,每种商品都可以存在于许多组中,相互嵌套和/或相互嵌套的配置中。
我们的数据集非常大,一些配置可以由400种不同的商品(或更多)组成,计算中涉及数千个stock\u项目。
我将解释真实世界的用法:该公司正在使用包含基本配置版本(基本配置)的配置构建PC。因此,我们基本上拥有与barebone相同的PC配置(内部所有部件都没有CPU、RAM和HDD)。然后,这些基本要素与其他产品组(如RAM内存,可以在组内、组内)和产品(商品)组合,形成最终用户配置。
样本数据:
PRODUCT B [stock quantity=20, avg_stock_price=$95] is in GROUP G1
PRODUCT C [stock quantity=10, avg_stock_price=$90] is in GROUP G2
GROUP G1 is made of PRODUCT A and PRODUCT B [stock quantity=120]
GROUP G2 is made of PRODUCT A and PRODUCT C [stock quantity=110]
CONFIGURATION C1 is made of GROUP G2 x2 AND PRODUCT A x1 [stock_quantity=60]
CONFIGURATION C2 is made of CONFIGURATION C1 x1 AND GROUP G1 x3 [stock_quantity=40]
- 可为配置类型的任何给定产品生成的配置总数
- 给定配置的前X个最便宜/最昂贵的库存项目集。
现在,我们可以将单个stock\u项目(每个项目的价格不同)替换为等式中的产品。我们会发现有很多方法可以做到这一点。为了找到最便宜的解决方案,我们需要迭代每种可能的库存商品组合,计算价格并按其对结果进行排序。
在我们的真实场景中,数据集是巨大的,需要几个小时才能完成整个库存的迭代。我们需要找到正确的算法这样可以更快地解决此问题。
stock\u项目可能如下所示。重要的是,每个stock\u项目可以有不同的股价:
- RAM 32GB Hynix serial number #1000, stock_quantity=1, stock_price=$99
- RAM 32GB Hynix serial number #1001, stock_quantity=1,
stock_price=$101
- RAM 32GB Hynix serial number #1002, stock_quantity=1,
stock_price=$100
- ...
- RAM 32GB Hynix serial number #1099, stock_quantity=1,
stock_price=$103
- RAM 32GB Samsung serial number #2000, stock_quantity=1,
stock_price=$98
- RAM 32GB Samsung serial number #2001, stock_quantity=1,
stock_price=$99
- RAM 32GB Samsung serial number #2002, stock_quantity=1,
stock_price=$97
- RAM 32GB Samsung serial number #2003, stock_quantity=1,
stock_price=$96
- RAM 32GB Micron serial number #3000, stock_quantity=1,
stock_price=$121
- RAM 32GB Micron serial number #3001, stock_quantity=1,
stock_price=$120
- ...
- RAM 32GB Micron serial number #3019, stock_quantity=1,
stock_price=$119```