1:
2: public int GetVoteSuggestBySuperUser(int[] keys, int[] values) {
3:
4: // Creo e popolo la lista dei superUser [che hanno espresso il voto per questo film]
5: List<RecommendationData> listtSuperUser = new List<RecommendationData>();
6: for (int i = 0; i < keys.Length; i++) {
7: if (keys[i] != 0) {
8: listtSuperUser.Add(new RecommendationData(i, values[i], keys[i]));
9: }
10: }
11: // La ordino per ordine di importanza dei super user
12: RecommendationData[] SuperUser = listtSuperUser.ToArray();
13: Array.Sort(SuperUser); // after this donators is sorted
14:
15: // Creo una lista dei primi x SuperUser.
16: // Ci entra chi ha il punteggio massimo e
17: // Chi ha il punteggio massimo-1
18: int maxNmatch = 0;
19: double cmd = 0;
20: List<RecommendationData> bestUser = new List<RecommendationData>();
21: for (int i = SuperUser.Length - 1; i > 0; i--) {
22: if (i == SuperUser.Length - 1) {
23: maxNmatch = SuperUser[i].nRightMatch;
24: }
25: if (SuperUser[i].nRightMatch + 1 >= maxNmatch) {
26: bestUser.Add(SuperUser[i]);
27: cmd += SuperUser[i].nRightMatch;
28: }
29: else {
30: break;
31: }
32: }
33: // Inserisco nell'arrey dei voti, il voto pesato di ogni superUser
34: double[] arrResult = new double[6];
35: for (int i = 0; i < bestUser.Count; i++) {
36: arrResult[bestUser[i].vote] += (bestUser[i].nRightMatch)/cmd;
37: }
38:
39: //Ritorno il voto che ha preso il maggior numero di consensi...
40: double maxValue = arrResult.Max();
41: return arrResult.ToList().IndexOf(maxValue);
42:
43: }
44: