sku-algorithm icon indicating copy to clipboard operation
sku-algorithm copied to clipboard

思路很好,但是代码逻辑还是有漏洞

Open biwin-wangli opened this issue 4 years ago • 18 comments

specList: [ { title: "颜色", list: ["白色", "红色"] }, { title: "内存", list: ["16G", "32G"] }, { title: "容量", list: ["150ml", "300ml", "450ml"] } ], specCombinationList: [ { id: "1", specs: ["红色", "16G", "450ml"] }, { id: "2", specs: ["红色", "32G", "150ml"] }, { id: "3", specs: ["红色", "32G", "300ml"] }, { id: "4", specs: ["红色", "32G", "450ml"] }, { id: "5", specs: ["白色", "16G", "150ml"] }, { id: "6", specs: ["白色", "16G", "300ml"] }, { id: "7", specs: ["白色", "16G", "450ml"] }, { id: "8", specs: ["白色", "32G", "150ml"] }, { id: "9", specs: ["白色", "32G", "300ml"] }, { id: "10", specs: ["白色", "32G", "450ml"] } ]

用此数据,无法正常渲染结果。

biwin-wangli avatar Jul 22 '20 08:07 biwin-wangli

逻辑上确实有漏洞,没有理由能在同级能建立连线

kkkelicheng avatar Jul 28 '20 09:07 kkkelicheng

@biwin-wangli @kkkelicheng 谢谢指出问题,我会积极寻找解决方法,如果有很好的解决方法,请回复我,或者给我提PR ,谢谢

xieyezi avatar Aug 03 '20 02:08 xieyezi

@kkkelicheng

逻辑上确实有漏洞,没有理由能在同级能建立连线

同级连线是指:在同一级的规格中,选择了某一项,需要判断同级中的其他项,是否可选。

xieyezi avatar Aug 03 '20 02:08 xieyezi

是的

kkkelicheng avatar Aug 20 '20 01:08 kkkelicheng

我尝试换了一种思路,https://github.com/mcfly001/choose-sku

mcfly001 avatar Oct 20 '20 09:10 mcfly001

说以下整体思路 当我们选择红色的时候,我们过滤得到id为1,2,3,4这几个sku的specs中包含红色,那我们就将这些specs合并,同时去重,获取到16G、32G、150ml、300ml、450ml这几个特性值可以选择。

当我们选择红色、32G的时候我们发现id为2,3,4这几个sku包含了红色且包含了32G,通过合并和去重之后获取到150ml,300ml,450ml这3个节点可选。

以此类推选择在增加一个也只是多了一个过滤条件,最后去重得到的特性值就是可选的,同时我们还能获取到价格区间以及剩余库存

mcfly001 avatar Oct 20 '20 12:10 mcfly001

@mcfly001 能给出代码实现吗?

xieyezi avatar Jan 21 '21 09:01 xieyezi

@mcfly001 能给出代码实现吗?

https://github.com/mcfly001/choose-sku

mcfly001 avatar Jan 25 '21 13:01 mcfly001

@xieyezi 我用加权图改了下,测了几个case没啥问题,你看看呢pr

Hilbertangers avatar Feb 23 '21 11:02 Hilbertangers

@Hilbertangers 谢谢提供解决方法,可以具体讲讲思路吗?

xieyezi avatar Feb 24 '21 05:02 xieyezi

@mcfly001 尝试了一下你的解决思路。和我一开始的解决思路如出一辙,只不过我发现你的方法可能有个问题,就是当我把三项都选择完了之后,其他可选的组合都被禁用了,这种情况其实不应该出现的。

QQ20210224-133719@2x

出现如上情况,其实【"白色", "32G", "300ml"】这种情况是仍可以选的,所以这里不应该禁用白色。

xieyezi avatar Feb 24 '21 05:02 xieyezi

@Hilbertangers 谢谢提供解决方法,可以具体讲讲思路吗?

我的思路是对无向图的边进行加权,每一种规格是一个权值,之后绘制邻接矩阵的时候把权值代替0,1的布尔值,然后在取交集判断的时候,判断是否相等就行了(即所选顶点是否在同一个权级的规格内)。 实现的时候发现存在单边多权的情况,需要做下特殊处理。 刚刚又加了个commit,fix了个bug

Hilbertangers avatar Feb 24 '21 07:02 Hilbertangers

@Hilbertangers 谢谢提供解决方法,可以具体讲讲思路吗?

我的思路是对无向图的边进行加权,每一种规格是一个权值,之后绘制邻接矩阵的时候把权值代替0,1的布尔值,然后在取交集判断的时候,判断是否相等就行了(即所选顶点是否在同一个权级的规格内)。 实现的时候发现存在单边多权的情况,需要做下特殊处理。 刚刚又加了个commit,fix了个bug

试了一下你的代码,先选白色,然后再选kg 就报错了

sheldon-xc avatar Feb 25 '21 10:02 sheldon-xc

@Hilbertangers 谢谢提供解决方法,可以具体讲讲思路吗?

我的思路是对无向图的边进行加权,每一种规格是一个权值,之后绘制邻接矩阵的时候把权值代替0,1的布尔值,然后在取交集判断的时候,判断是否相等就行了(即所选顶点是否在同一个权级的规格内)。 实现的时候发现存在单边多权的情况,需要做下特殊处理。 刚刚又加了个commit,fix了个bug

试了一下你的代码,先选白色,然后再选kg 就报错了

感谢,已经修改了,再试试呢

Hilbertangers avatar Feb 25 '21 10:02 Hilbertangers

两组规格没问题,3组就出问题了,2X2X3 一共12种sku, 如果少了某一个,剩余11中sku,这个图和12中sku没有区别

mouday avatar Apr 19 '22 06:04 mouday

两组规格没问题,3组就出问题了,2X2X3 一共12种sku, 如果少了某一个,剩余11中sku,这个图和12中sku没有区别

@mouday 可以提供下用例数据吗,像1楼那种

Hilbertangers avatar Apr 19 '22 09:04 Hilbertangers

两组规格没问题,3组就出问题了,2X2X3 一共12种sku, 如果少了某一个,剩余11中sku,这个图和12中sku没有区别

@mouday 可以提供下用例数据吗,像1楼那种

我的数据和一楼类似

mouday avatar Apr 19 '22 09:04 mouday

两组规格没问题,3组就出问题了,2X2X3 一共12种sku, 如果少了某一个,剩余11中sku,这个图和12中sku没有区别

@mouday image image 试了下你说的情况 没有复现😢

Hilbertangers avatar Apr 19 '22 09:04 Hilbertangers