-1

我在一个以它们的名字为特征的网络服务器上有很多图像。每个文件都属于多个类别,每个人都属于一个类别组。例如:

group_fruit = ["apple", "banana", "pear"];
group_color = ["red", "blue", "yellow"];
group_origin = ["Italy", "France", "Portugal"];

a blue apple from Italy will be 00_01_00_uniqueid.jpg

如果我想查找查找类别的图像(例如,我想要来自法国或葡萄牙的蓝色或黄色梨),我可以通过简单的方式在文件列表中查找文件。问题是当我有大量类别组(例如 10 个)时,每个类别都有很多类别(即 10 个),因为我一次只能下载100 个项目的文件列表。在这种情况下,我可以有一个查询生成 10^10 个可能的答案(最坏的情况)。

鉴于接近最坏情况的任何事情都将难以管理,我想按照以下步骤进行:

我制作了几个使用前五个组中的类别命名的 xml 文件,我在其中存储具有该类别的图像数量以及其余组中的其他五个类别。例如

01_00_03_00_04.xml contains:
    01_00_03_00_04_00_02_04_05_07 = 3
    01_00_03_00_04_04_04_03_00_08 = 12
    01_00_03_00_04_05_08_09_01_02 = 5

这意味着我有 12 张图像,例如 01_00_03_00_04_04_04_03_00_08 类别。这样,如果我正在寻找特定的特征,我可以下载与我正在寻找的前五组特征兼容的 xml,然后我可以搜索每个 xml 以查找是否有每个可能组合的结果类别。在最坏的情况下,我将在 10^5 xml 中搜索 10^5 个类别。

对所有文件使用单个大 xml 的解决方案不适用,因为它太大而无法下载(大延迟)。为每个可能的类别组合下载列表的解决方案会太慢(因为我可以有几个组合没有结果,所以用户会期望太多时间来看到第一个结果)。这就是为什么我想采用中间解决方案的原因。

我知道最好的方法是使用数据库,但我想找到一个客户端解决方案,以免廉价服务器超载。

编辑:问题是:您对更有效的方法有任何想法吗?

感谢您的耐心等待

4

1 回答 1

0

我认为最简单的解决方案是创建一个包含可能组合的对象:

var combinations = {
    1:{
        1:[1,2,3],
        2:[1,2,3],
        3:[1,2,3]
    },
    2:{
        1:[1,2,3],
        3:[1,2,3]
    },
    3:{
        1:[2,3],
        2:[1,3],
        3:[1,2]
    },
    /*
    fruit_number:{
        color_number:[origin, origin, origin],
        color_number:[origin, origin]
    }
    */
}
var fruit = ["apple", "banana", "pear"];
var color = ["red", "blue", "yellow"];
var origin = ["Italy", "France", "Portugal"];

for(var f in combinations){
    for(var c in combinations[f]){
        for(var o in combinations[f][c]){
            console.log("A",color[c-1],fruit[f-1],"from",origin[combinations[f][c][o]-1])
        }
    }
}

它可能不漂亮,但我认为它和你会得到的一样有效。

于 2013-02-04T08:54:05.127 回答