采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
工作中遇到了一个算法,不知道老师有没有时间提供下思路,问题大概是这样的,有大量订单(订单包含订单种类、金额两种属性),要求,总订单数<=50,订单种类<=5,总金额>=1000w;想了好久也找了好久没有找到好的方法,望老师提供个思路
实际很多生产环境的问题,由于数据量巨大,大多可以通过“缓存”关键数据的方式得到很好的解决。比如你提到的场景,如果对每一个订单种类的订单,都单独缓存一张表,专门存储这个订单种类中订单金额最大的前50个订单,那么这个问题就会很容易解决。而在添加或者删除订单的时候,我们只需要对这个额外的空间也进行一下删除或者添加就好了。
讨论实际算法问题的另一个障碍是,实际上的我们解决问题的限制会有很多,很多时候问题看似表述清楚了,但是一旦提出某个解决方案,就会发现原始问题中的一些限制或者条件并没有阐述出来或者阐述清楚。(甚至我遇到过讨论了半天发现连算法目标从一开始都定位错误的情况:))
另一方面,数据规模的界限,或者数据的分布情况,会非常影响算法的选择。比如你只提出了最终需要订单种类<=5,但是最多有多少订单种类?举一个极端情况,如果在你的业务场景中,订单种类甚至大于订单量,那么我说的方法是不合适的:)
最后,在实际工作中,很多算法的目标不是死的。对于多种限制,有优先级的区分,会影响最终算法的确立。比如你给出的条件,总金额一定要大于等于1000万?如果我的算法找到的是9999万9999的订单组合,可以吗?在有多个解的情况,应该优先考虑减少订单种类?还是减少订单数?还是最大化订单金额?等等等。
所以,我只是提供一个大概思路,具体解决方案,还要和同一个项目组的成员确定解决方案:)
加油!:)
非常感谢老师!订单种类是远远小于订单数量的。我先按照缓存种类那种方式想一想,谢谢老师提供思路
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
10.3k 16
1.4k 17
1.3k 14
1.2k 14