2015-02-24 37 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