问一个算法的思路

2018-08-07 11:15:22 +08:00
 waiaan

点外卖的时候不是有满减吗,如何用算法实现最优的点餐组合?即最终合计与满减的值最接近。 比如满 35 减 24,每份菜的价格是已知的,如何算出怎么点菜可以与 35 最接近,当然要比 35 大了。

6128 次点击
所在节点    JavaScript
34 条回复
wingkou
2018-08-07 11:17:09 +08:00
这不就是线性规划吗?
timboy
2018-08-07 11:37:43 +08:00
背包问题?
murmur
2018-08-07 11:40:05 +08:00
需求在哪里呢?
点餐不是按喜欢吃和吃多少点么
满 35 减 24 等你点了结账就发现会多出几块钱的饭盒费和派送费
dingyaguang117
2018-08-07 11:42:04 +08:00
背包问题
enenaaa
2018-08-07 11:42:15 +08:00
从全排列开始。逐个条件裁剪掉不必要的路径。再以动态规划策略利用到历史步骤的结果。
waiaan
2018-08-07 11:45:04 +08:00
@murmur 不是,只是偶然想到这个问题,跟具体点餐的事情没关系。
rabbbit
2018-08-07 11:59:15 +08:00
允许重复点同一个菜吗?
geelaw
2018-08-07 12:00:55 +08:00
这个问题是 NP-H,很明显它可以用来解子集和。

买化妆品的版本(单纯的子集和归约)

https://geelaw.blog/entries/galeries-lafayette-discount-npc/

买内裤的版本(有更加复杂的优惠规则)

https://www.weibo.com/2389742313/GjmvmAQd6
jasonMakarov
2018-08-07 12:01:34 +08:00
KNN 考虑下吧
streamo
2018-08-07 12:02:29 +08:00
因为你要求具体方案所以不是背包。比较容易想到的办法是用 DFS 求排列组合然后在结果集里挑。
waiaan
2018-08-07 12:04:34 +08:00
@rabbbit 当然可以
rabbbit
2018-08-07 12:07:57 +08:00
这个比较像 leetcode 40 题
给出一个数组和目标值,求数组元素和等于目标值的可能组合
https://leetcode.com/problems/combination-sum-ii/description/

想了好久也不出怎么用动态规划做...
geelaw
2018-08-07 12:08:15 +08:00
@streamo #10 是不是要输出具体方案和是不是背包问题没有必然联系。解决背包问题的动态规划算法可以加上对方案的记录。
wkan
2018-08-07 12:10:41 +08:00
点最便宜的那个,多点几份是最接近的
waiaan
2018-08-07 12:17:15 +08:00
@rabbbit 差不多是这个意思了
lychnis
2018-08-07 12:20:30 +08:00
点外卖 你这样算出来的你愿意吃吗。。。
streamo
2018-08-07 12:21:54 +08:00
@geelaw 想了下觉得你说的对,求具体方案不用 DP 成了我惯性思维了。
murmur
2018-08-07 12:23:48 +08:00
@waiaan 没有算法怎么谈需求
饿了么这种他为了刺激你消费绝对不会给你最优的背包
你点一个他就会提示下一档优惠是多少
不断刺激你加东西
murmur
2018-08-07 12:24:01 +08:00
*更正:没有需求怎么谈算法
waiaan
2018-08-07 12:25:03 +08:00
@murmur
@lychnis
只是单纯讨论这个问题的思路

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477534

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX