2015-02-24 90 views
-1

我已经打在继续在C++程序我的工作了障碍,我不知道什么是最好的方式来处理我的问题是。这是非编程术语的情况:我有一份儿童名单,每个孩子都有一个特定的体重,年龄和幸福感。我有一种方式,人们可以直观地查看特定于这些特征的孩子的骨骼。 (想想一个MMO角色定制,其中每个特征都有滑块,当你将滑块滑动到较重位置时,步行周期看起来像角色较重)。多维数组诉排序多个阵列

之前,我的系统中有一组步行周期的频谱每个特征的两端。例如,最重要的步行有一个特定的步行周期,一个用于最轻的步行,一个用于最年轻的步行等。没有中间输入,输出是滑块在标尺上的位置和最重的步行周期以及最轻的步行周期以特定百分比(滑块的位置)平均。

现在的问题,我有预设的步行周期的大型图书馆和各步行周期具有特定的体重,年龄和幸福。所以,Joe的体重是4,7岁,幸福度是8,Sally是2,3,5。当滑块移动到特定值(体重5,年龄8,快乐7)时。但是,一次只能移动一个滑块,而最后移动的滑块是找到最匹配的最重要的特征。我想在我的图书馆中找到与这三个值最接近的孩子,并且乔将是最接近的。

我被告知使用3维数组检查出来,但我宁愿使用一个子对象数组,并对该数组做多个搜索,我是一个菜鸟,我知道搜索需要一些计算时间但我一直倾向于使用单个阵列。我也可以使用二维数组,但我不确定。什么样的数据结构将是最好的搜索三个值?

谢谢你的帮助!

回答

2

每个滑块需要多少个不同的值?如果每个滑块有10个值,则这意味着有10 * 10 * 10 = 1000个不同的可能的字符类。如果你的图书馆只有不到1000个步行周期,只要阅读它们,所有寻找最近的匹配可能会足够快。

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

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

+0

滑块在1-10的范围内,然而设置的是,步行周期的数量将会改变,每个步行周期的特征值是硬编码的,不会改变。目前为小,但我未来看不到超过100的图书馆。 谢谢你的回答。我知道单个阵列现在可以工作,我只是想和更有经验的人核对一下,如果这会导致未来的问题。 – user2125844 2015-02-24 03:30:21

1

我维尔夫认为,走循环的数量是重要的,因为即使有说10万次,你可以很容易地使用蛮力找到最最大过...

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用你喜欢的任何粒度圆润参数(例如圆形的体重下降到最近的5公斤,年龄组由数座1的整数部分。5岁,只留下幸福)。然后搜索你评估你的目标{rw(体重),ra(年龄),rh(幸福)}指标周围的条目......你偏离的距离越远(特别是最后一个滑块移动的参数,不太可能你会找到比你已经看到的更好的适合,所以调谐品味

上述索引是我认为Wilf打算的一个改进 - 只是使用函数将映射从值空间分解为矢量

+0

这样做很有意义,谢谢! – user2125844 2015-02-24 05:40:24