超市商品排列优化伴学笔记

135 阅读4分钟
一、问题背景与分析

在这次学习中,遇到了一个具有实际应用场景的超市商品排列问题。超市中有包含n个格子的货物架,上面放置用小写字母az表示的商品,会有m种顾客想要购买的商品,已知货物架上商品的初始顺序s以及顾客想要购买的商品种类c。作为超市管理员,要在顾客到来前调整商品顺序,使得尽可能多地卖出商品,且第一个顾客进入后就不能再调整顺序了。这需要我们通过合理的算法逻辑来找到最优的商品排列,从而确定最多能卖出的商品数量。

二、代码思路解读

(一)存储商品位置信息 首先,创建了一个HashMap类型的commodityPositions,用来存储每种商品在货物架上的位置信息。通过循环遍历货物架上的每一个格子(即字符串s的每一个字符),利用computeIfAbsent方法,如果当前商品还没有对应的位置列表,就创建一个新的ArrayList来存放其位置,然后将当前格子的索引添加进去。这样就清晰地记录了每种商品所在的各个位置情况。 (二)重新排列货物架(模拟) 接着,创建了一个长度为nint数组rearrangedShelf来模拟重新排列后的货物架索引。按照顾客想要购买的商品种类顺序(遍历字符串c),去查看对应的商品在之前记录的位置列表中是否存在。若存在,就对其位置列表进行排序(优先选择靠前的位置更有利于卖出商品),然后取出最靠前的位置放入rearrangedShelf数组中,通过index变量来控制存放的索引。这里要注意,其实并没有真正地移动商品,只是在模拟重新排列的过程。 (三)统计卖出商品数量 最后,通过创建一个HashSet类型的visited集合以及循环来统计能够卖出的商品数量。循环遍历重新排列后的货物架索引数组,只要当前位置没有被访问过,就将其加入visited集合,并使卖出商品数量soldCount加1。同时,如果当前商品已经满足顾客需求且后面还有未访问的商品,就通过内层循环跳过已经访问过的位置,避免重复计数。最终,soldCount的值就是在最优调整下能够卖出的最大商品数量(前提是不超过顾客需求种类数m)。

三、收获与体会

(一)数据结构运用 这次实践让我深刻体会到了合适的数据结构在解决问题中的重要性。像HashMap方便地存储了商品及其位置的对应关系,使得查找和操作都十分便捷;而HashSet用于避免重复访问,高效地辅助完成了卖出商品数量的统计工作。 (二)算法逻辑构建 从按照顾客需求重新排列货物架的模拟过程,到准确统计卖出商品数量的逻辑,明白了如何去站在优化目标的角度思考算法步骤,要考虑怎样的排列顺序能最大化满足顾客需求、卖出更多商品,也学会了通过代码去巧妙地模拟实际场景中的操作,虽然没有真正地物理移动商品,但通过索引等方式实现了类似的效果。 (三)代码调试与验证 在main方法中看到了通过输出比较结果的方式来验证代码的正确性,这种简单的测试手段能帮助我们及时发现代码可能存在的问题,确保算法在不同的输入样例下都能正确运行,得出符合预期的最多卖出商品数量的结果。 总之,这个超市商品排列优化的案例让我在算法、数据结构运用以及代码测试等方面都有了新的收获,有助于我更好地应对类似的逻辑优化问题,提升编程解决实际问题的能力。