Algorithm Google HashCode 2017上展示的缓存分发练习
我目前正试图找到一个有效的解决方案来解决本文档中所述的问题 TLDR为了最大限度地减少youtube视频的延迟,缓存提供的服务有限 使用容量。但是,并非每个缓存都连接到每个 端点和不是每个entpoint都请求相同的视频。目标是 使整个网络的总延迟最小化 我的方法是简单地遍历每个端点和每个请求块,找到每个视频大小的延迟减少最多的最佳缓存(我将其称为请求密度) 当最佳缓存已经达到其容量时,我会尝试将其存储起来,以交换请求密度小于的视频,或者在没有其他可能性的情况下使用不同的缓存(请注意,在我的模型中,数据中心也是一个缓存) 您可以将其可视化为视频请求是具有不同密度的片段,这些片段在堆栈中排序Algorithm Google HashCode 2017上展示的缓存分发练习,algorithm,sorting,optimization,combinatorics,Algorithm,Sorting,Optimization,Combinatorics,我目前正试图找到一个有效的解决方案来解决本文档中所述的问题 TLDR为了最大限度地减少youtube视频的延迟,缓存提供的服务有限 使用容量。但是,并非每个缓存都连接到每个 端点和不是每个entpoint都请求相同的视频。目标是 使整个网络的总延迟最小化 我的方法是简单地遍历每个端点和每个请求块,找到每个视频大小的延迟减少最多的最佳缓存(我将其称为请求密度) 当最佳缓存已经达到其容量时,我会尝试将其存储起来,以交换请求密度小于的视频,或者在没有其他可能性的情况下使用不同的缓存(请注意,在我的模
我之所以要解释所有这些,是因为我真的不知道我的解决方案是否合适,如果不合适:有什么更好的方法来解决这个问题?如果有人给你一个建议的解决方案,你可以做的一件事就是选择一个缓存服务器,清空它,然后试着找出最好的方法来填充它,得到一个至少和建议的一样好的解决方案 我认为这是背包问题,所以要找到一个有效的精确解,或者是原始问题,并不容易
背包问题有很好的近似方法,所以我认为可能值得对它进行编程,并将其用于您的方法中的解决方案。如果它不能在原来的解决方案上有多大改进,恭喜你!如果可以,您还有另一种解决方法-继续运行背包问题以调整每个缓存服务器的内容,直到您找不到任何改进。我已经使用基本OOP、基于流的数据读写和基本循环解决了此问题 我的解决方案实际上可在以下位置获得: 这个解决方案是用PHP编写的,只是因为我希望用解释语言而不是编译语言来快速完成这项工作。然而,这可以很容易地扩展到任何语言,以加快执行时间
def distribute_video_requests(endpoint, excluding_caches=set()):
caches = endpoint.cache_connections - excluding_caches
for vr in endpoint.video_requests:
optimal_cache = find_optimum(caches, vr)
exchange = try_put(optimal_cache, vr)
if exchange["conflicting"]:
excluding_caches.add(optimal_cache)
for elm in exchange["affected"]:
distribute_video_requests(elm["from"], excluding_caches)
for ep in endpoints:
distribute_video_requests(ep)