多维数组v.对多个数组进行排序

Multidimensional array v. Sorting multiple arrays

本文关键字:数组 排序      更新时间:2023-10-16

我在C++程序中继续工作遇到了障碍,我不确定解决问题的最佳方法是什么。以下是非编程术语中的情况:我有一个孩子的列表,每个孩子都有特定的体重、年龄和幸福感。我有一种方法,人们可以直观地看到孩子的骨骼,这是特定于这些特征的。(想象一下MMO角色自定义,每个特征都有滑块,当你将权重滑块滑动到较重时,行走周期看起来角色更重)。

以前,我的系统为每个特征的光谱的每一端都有一个固定的行走周期。例如,有一个特定的步行周期用于最重的步行,一个用于最轻的步行,另一个用于最小的步行,等等。没有中间输入,输出是滑块在标尺上的位置,最重的散步周期和最轻的散步周期是按特定百分比(滑块的位置)求平均值。

现在的问题是,我有一个预设步行周期的大库,每个步行周期都有特定的体重、年龄和幸福感。所以,乔的体重是4,年龄是7,幸福感水平是8,萨莉是2,3,5。当滑块移动到特定值时(体重5,年龄8,幸福感7)。然而,一次只能移动一个滑块,最后移动的滑块是找到最接近的匹配项的最重要特征。我想在我的库中找到与这三个值最接近的孩子,Joe将是最接近的。

我被告知要使用三维数组进行检查,但我宁愿使用一个子对象数组,并在该数组上进行多次搜索,我是一名新手,我知道搜索需要一些计算时间,但我一直倾向于使用单个数组。我也可以使用二维数组,但我不确定。在哪种数据结构中搜索三个值是最好的?

谢谢你的帮助!

每个滑块可以取多少个不同的值?如果每个滑块有十个值,这意味着有10*10*10=1000个不同的可能字符类。如果你的图书馆只有不到1000个步行周期,那么阅读所有的步行周期,寻找最近的匹配可能就足够快了。

当然,如果每个滑块有100个值,那么你可能想要更聪明的东西。我的观点是有些东西不需要优化。

你的步行自行车库是否一劳永逸?如果是这样的话,也许你可以预先计算每个滑块设置的行走周期,并将其写入一个静态数组。

我同意Wilf的观点,步行周期的数量是至关重要的,因为即使有100000个周期,你也可以很容易地使用蛮力找到超过。。。

weight_factor * diff(candidate.weight, target.weight) +
age_factor * diff(candidate.age, target.age) +
happiness_factor * diff(candidate.happiness, target.happiness)

其中最后移动的滑块的因子高于其他滑块。

对于比这更多的周期,你想在一定程度上限制搜索空间,一些索引会很有用,例如:

map<int, map< int, map<int, vector<Cycle*>> cycles_by_weight_age_happiness;

你可以在cycles[rw(weight)][ra(age)][rh(happiness)]中添加一个指向每个步行周期的指针(以{体重、年龄、幸福感}为特征),其中rwrarh中的每一个都按你喜欢的粒度对参数进行四舍五入(例如,将体重四舍五舍五入到最接近的5kg,按年龄的对数基数1.5的整数部分对年龄分组,不要考虑幸福感)。然后,为了搜索,你会评估"围绕"你的目标{rw(体重)、ra(年龄)、rh(幸福)}指数的条目。。。你偏离得越远(尤其是在最后一个滑块移动的参数上,你就越不可能找到比你已经看到的更好的适合度,所以请根据口味调整。

上面的索引是我认为Wilf意图的改进——只是使用函数将映射从值空间解耦为索引中的向量。