diff --git a/_posts/2012/2012-09-21-sku.md b/_posts/2012/2012-09-21-sku.md index 266ec44..ae9ee28 100644 --- a/_posts/2012/2012-09-21-sku.md +++ b/_posts/2012/2012-09-21-sku.md @@ -137,7 +137,7 @@ SKU,Stock Keeping Uint(库存量单位),由(销售属性:属性值)的键值 初始状态是所有的属性值都处于非选中状态,如果此时你选择尺码S,那么程序需要对还没有选择的属性的属性值进行检测,也就是对颜色分类的每一个属性值进行检测,以判断在此情况下其是否可以被选择,如果不能被选择,则需要被设置为禁用状态,首先对 格子裙(七分袖,模特版) 编号3232483进行检验 查看 1627207:3232483;20509:28314(sku中各个属性的先后次序是一定的)是否能够存在,到所有的sku中查看发现此组合是可以存在的且为一个完整的sku. 接着来检查 格子裙(九分袖,袖口无分叉)编号3232484 , 也就是检查1627207:3232484;20509:28314组合是否能够存在 发现其匹配的sku库存为0,则需要将其设置为不可选,所以便有了上图的情形。 上面的分析毕竟为人类大脑思考的模式,当需要用计算机来实现的时候,需要进行再抽象,找出算法。 -如果某个属性值被选中了,可以看作某个属性键值对被选中了。假设某个宝贝的一个存货大于0的sku为 abc (其实a,b,c都是键值对,将其看作一个集合集合中有三个元素a,b,c),那么通过这个sku可以知道sku属性的可选组合包括 a,ab,ac,b,bc,c,abc,所以本质是求此sku的非空子集。如果存在多个库存大于0的sku,则需要分别求其非空子集,最后得到的所有的集合(有些集合可能重复了需要剔除)就是所有sku属性可选组合了,可以用来检验属性值的可选性. +如果某个属性值被选中了,可以看作某个属性键值对被选中了。假设某个宝贝的一个存货大于0的sku为 abc (其中a,b,c都是键值对,将其看作一个集合集合中有三个元素a,b,c),那么通过这个sku可以知道sku属性的可选组合包括 a,ab,ac,b,bc,c,abc,所以本质是求此sku的非空子集。如果存在多个库存大于0的sku,则需要分别求其非空子集,最后得到的所有的集合(有些集合可能重复了需要剔除)就是所有sku属性可选组合了,可以用来检验属性值的可选性. 计算组合的非空子集的算法可以使用二进制位的方式进行计算。 对构成一个SKU的属性键值对的组合而言,在其某一个子集中,每一个属性键值对的状态无非有两个,不存在和存在,我们分别用0和1表示,那么有n个键值对的SKU所有的子集个数为2^n 去除一个空集后为2^n - 1.