Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Google HashCode 2017上展示的缓存分发练习_Algorithm_Sorting_Optimization_Combinatorics - Fatal编程技术网

Algorithm Google HashCode 2017上展示的缓存分发练习

Algorithm Google HashCode 2017上展示的缓存分发练习,algorithm,sorting,optimization,combinatorics,Algorithm,Sorting,Optimization,Combinatorics,我目前正试图找到一个有效的解决方案来解决本文档中所述的问题 TLDR为了最大限度地减少youtube视频的延迟,缓存提供的服务有限 使用容量。但是,并非每个缓存都连接到每个 端点和不是每个entpoint都请求相同的视频。目标是 使整个网络的总延迟最小化 我的方法是简单地遍历每个端点和每个请求块,找到每个视频大小的延迟减少最多的最佳缓存(我将其称为请求密度) 当最佳缓存已经达到其容量时,我会尝试将其存储起来,以交换请求密度小于的视频,或者在没有其他可能性的情况下使用不同的缓存(请注意,在我的模

我目前正试图找到一个有效的解决方案来解决本文档中所述的问题

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)