- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
什么是最好的方法(使用的算法/数据结构)来获得在购物网站上订购的前 k 项商品,相关信息在其 n 个服务器中的每一个的日志中?
我正在考虑一种方法,该方法涉及维护一个固定大小的双向链表 k 每个节点都有一个计数变量(可能是一个范围)一组共享相同计数的产品 ID。随着每个事件(productId)的到来,列表被遍历并更新计数,如果可能的话,提升到下一个更高的计数范围。
上述做法是否正确?还有哪些其他更好的解决方案?
最佳答案
您的方法不正确,您说列表的大小是固定的,但这表明您已经知道哪些是前 k 个元素 - 显然不是这种情况。假设您已经有一个大小为 k
的填充列表,并且您遍历了一半的项目——现在,下一个项目在整个集合中重复(n/2 次重复)——它显然应该在前 k 个中,但你从未将它放入列表中——所以结果是错误的。
您可以通过某些方式解决问题,具体取决于限制(主要是日志文件的大小)。
方法 1:构建直方图并找到前 k 个元素
首先,迭代列表,构建一个histogram (基于散列/树的映射 map<item,int>
) - 然后,在找到每个元素重复出现的数量后,它只是找到前 k 个元素,这在 this thread 中有介绍。在细节。
查找top k是通过维护一个最小堆来完成的,迭代你的集合,为每个项目检查它是否高于你堆中的最小项目,如果是,从堆中弹出元素并插入这个项目相反。
构建直方图的方法很简单:
histogram = new map<item,int>
for each element x in the list:
val = (x is a key in map? map.get(x) : 0) + 1
map.put(x,val)
此方法的复杂度为 O(nlogn)
如果使用基于树的 map ,或 O(nlogk)
如果使用基于哈希的 map 。这是非常有效的,但是如果您的日志文件包含数万亿个条目,则可能无法在合理的时间内在一台机器上完成,您需要将工作分配到多台机器上。这引导我们采用下一种方法。
方法 2: map-reduce
此方法适用于非常大的日志文件,并且通过将问题分布在大型集群上来完成。这是一种更复杂的方法 - 但对于非常大的文件,可能无法使用一台机器找到前 k 个元素。
map(file):
for each item in file:
emit(item,1)
reduce(item,list)
sum = 0
for each x in list:
sum = sum + x
emit(item,sum)
在这个阶段,你处理了列表并构建了一个直方图,现在我们需要找到前 k 个,想法是拆分数据,这样每台机器都会得到一部分,并产生它的本地前 K 个元素,然后将所有#machines*K 元素发送到将选择全局前 k 的单个“master”机器
关于algorithm - 从电子商务网站订购的 Top-k 商品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219644/
我正在为客户建立一个 EC 网站,项目经理提出了一些奇怪的想法,我正在努力实际实现他向客户销售的产品。 这是我的主要问题和系统设置的快速总结:产品在类别内,类别可能是另一个类别的子类别。因此,该类别在
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
最近一直在想响应式网站与移动网站,尤其是电子商务网站。我有一个相当大的项目即将开始,看起来它将是一个相对繁重的项目(就模板和功能而言)。因此,立即想到的是做一个移动站点来削减某些可能对性能要求很高但不
我正在为大学考试编写一些 Java 代码,该项目基于“电子商务”。要求之一是将产品插入购物车,我必须使用 Visitor 模式。 这是教授给我的一个例子,我必须“用”它来代表我的购物车。问题是我有一个
我正在尝试确定在数据库中存储订单的最佳方式。 每个产品都可以配置,但并非所有选项都相同。例如: Product A Size: small, medium, large Membership: 1 y
我整天都在苦思冥想,试图找到这个问题的答案;我终其一生都无法弄清楚如何在我为客户建立的 Woocommerce 商店中右对齐价格。这是我所在的位置: .price .woocommerce-Price
我需要有关棘手问题的专家建议。 场景是: 电子商务网站 很多产品 这些产品有很多折扣 产品由唯一的 ProductID 标识并具有销售价格。很经典的剧情。该产品还可以有一个或多个折扣。 折扣可以有不同
我想在用户第一次购买之前将结帐的账单字段的值预填充到数据库存储的值中。 我试过下面的代码: add_filter( 'woocommerce_checkout_fields' , function (
我想了解数据库的可扩展性,所以我刚刚听过一个关于高度可扩展的 Web 应用程序的习惯的演讲 http://techportal.inviqa.com/2010/03/02/habits-of-high
在我的电子商务应用程序(用于咖啡馆/餐馆)中,我目前具有以下数据库结构。 cart 就是购物车,可以在其中添加商品,商品/订单发送到服务器之前的一个临时场所。 ProductCart 是一个行项目,许
我在我的项目中实现了 Google Analytics。在他们要求我启用电子商务之前,一切似乎都很好。 按照所有设置步骤,我已在 GA 仪表板上为我的项目启用电子商务,并且 Unity 中的设置必须正
我想使用 GTM 来跟踪电子商务交易。这是针对客户端环境的测试,其中代码可能位于 GTM 代码片段 之后的 ,这就是为什么使用 Dom Ready 作为事务标签的触发器不可靠的原因。 这是我的测试代码
我需要覆盖我的 spree 商店的标题颜色。我在 ../mystore/vendor/assets/stylesheets/spree/frontend 目录下创建了一个 custom.css。但它不
我正在使用 Odoo 10。在新用户注册后(通过 localhost:8069/web/signup)我希望他自动分配到我在我自己的自定义模块上创建的组中(用户将需要身份验证稍后来自管理员,以便他可以
我希望构建一个用户能够从我的站点购买产品的应用程序。购买将包括他们购买的实物、运输、税收(如果适用)等。我知道 PayPal 有许多付款选项,其中一个是 Web 服务,另一个只是重定向到他们的网站。我
我正在开发一个电子商务网站。我正在尝试使用 ajax 请求设置购物车商品数量。 我明白了 if (isset($_POST['product_id']) && isset($_POST['new_qu
假设用户访问我的网站并购买了一个棚子。棚子将被添加到购物车并完成工作。在我的数据库中,我已经有了棚子的尺寸(以显示给客户)。 假设客户还想要棚子的地毯(你永远不知道)我希望我的网络应用程序自动理解地毯
我正在尝试设置一个 AJAX 函数来清空我的购物车 HTML Go to Product JavaScript function clearCart(d) { jQuery(document)
我正在尝试在我的应用程序中设置 Spree(我愿意使用 Gem 或在供应商模式下运行它)。 我已经查看了文档和 wiki,但对于它如何在我现有的应用程序中工作,我仍然有些困惑。我可以为 Spree 使
目前正在使用 GTag 将购买数据记录到 Google Analytics E-Commerce。我正在使用标准电子商务。现在我要把这个过程作为后期处理。 (即)需要使用 C# 应用程序将购买数据记录
我是一名优秀的程序员,十分优秀!