Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Оптимизация программы по памяти - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Алгоритм Дейкстры http://www.cyberforum.ru/cpp-beginners/thread1181002.html
Привет всем. Делаю для курсовой поиск кратчайшего пути по алгоритму Дейкстры на C++, все сделал вот только преподаватель требует чтобы програма в показывала путь на самой матрице. А я в толк не могу...
C++ Покупатели продуктового магазина пользуются 10% Помогите решить пожалуйста, вообще не знаю как решить( Покупатели продуктового магазина пользуются 10% скидкой, если покупка состоит из более чем 5 наименований товаров или суммарная стоимость... http://www.cyberforum.ru/cpp-beginners/thread1180997.html
Определить периоды, когда в парикмахерской свободные женские и мужские мастера C++
Здравствуйте форумчане, у меня к вам несколько нескромная просьба, помогите мне пожалуйста, оформив эти задачи программно: и эту: "В парикмахерской обслуживания клиентов проводят по...
Перегрузка операторов, если класс содержит массив C++
Добрый день, требовалось написать прогу, которая выводит количество повторений элементов в массиве, причем сделать это требовалось с помощью объектов, т.е. должно быть два объекта поставщика, один...
C++ Выравнивание текста пробелами по ширине. http://www.cyberforum.ru/cpp-beginners/thread1180950.html
Очень нужно написать решение на C++. Кто-нибудь может помочь? Я пытался 2 дня - ничего не получается :( Задача Вашей программе дается абзац текста. Этот текст состоит из ряда слов, отделенных...
C++ Вычислить сумму ряда 4. 4.3. Написать программу, позволяющую вычислить с помощью цикла: 2+4+6+…+2n, где n задается с клавиатуры. подробнее

Показать сообщение отдельно
svizzle
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 2

Оптимизация программы по памяти - C++

19.05.2014, 16:45. Просмотров 594. Ответов 3
Метки (Все метки)

Здравствуйте, дорогие коллеги!

Прошу вашей помощи. Кто чем поможет.
Есть минимальная программа рекомендательной системы( код ниже ). Работает по модели baseline predictors, сложного ничего нет. Получается так что программа есть много памяти при загрузке больших данных. Как же можно ее оптимизировать?( что бы использовалось меньше памяти ).

Спасибо за внимание!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <string>
#include <iomanip>
 
 
using namespace std;
 
const int MAX_SIZE_USER = 10000;                // максимальное количество пользователей или фильмов
 
typedef vector<float> typ_float;
 
/**
* @description Вычисление значения BIAS.
* @params сумма всех оценок, количество оценок, общий средний рейтинг
* @return BIAS значение 
*/
float bias( float sum, int count, float average ){
    return (sum / count ) - average;
}
 
int main() {
    
    int tmp_user, tmp_item, tmp_rate;           // для чтения таблиц
 
    short max_rate;                             // максимально возможная оценка 
    int count_user, count_items;                // количество пользователей и фильмов
    int count_learn_items, count_test_items;    // количество оцененных и неоцененных фильмов   
    float raw_average = 0;                      // общее среднее значение оценок
    
    vector<typ_float> table_learn;
    typ_float tmp;
 
    typ_float bias_users;
    typ_float bias_items;
 
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
 
 
    cin >> max_rate >> count_user >> count_items >> count_learn_items >> count_test_items;
 
    tmp.assign(count_items, 0 );
    table_learn.assign( count_user, tmp );
    bias_users.assign(count_user, 0);
    bias_items.assign(count_items, 0);
 
    tmp.clear();
 
    cin.ignore(1000, '\n' );
 
    //читаем данные обучаемой таблицы и формируем матрицу
    for( int i = 0; i < count_learn_items; i++ ){
 
        cin >> tmp_user >> tmp_item >> tmp_rate;
 
        table_learn[tmp_user][tmp_item] = tmp_rate;
        raw_average += tmp_rate;
    }
 
    raw_average /= count_learn_items;       // общий рейтинг
 
    int tmp_count_user;
    int tmp_count_item;
 
    float tmp_value_user;
    float tmp_value_item;
 
    // BIAS пользователей
    for( int i = 0; i < count_user; i++ ){
 
        tmp_value_user = tmp_value_item = tmp_count_item = tmp_count_user = 0;
 
        for (int j = 0; j < count_items; j++)
        {
            if( table_learn[i][j] ){
                tmp_value_user += table_learn[i][j]; tmp_count_user++;
            }
 
            if( table_learn[j][i] ){
                tmp_value_item += table_learn[j][i]; tmp_count_item++;
            }
        }
 
        bias_users[i] = bias( tmp_value_user, tmp_count_user, raw_average );
        bias_items[i] = bias( tmp_value_item, tmp_count_item, raw_average );
    }
 
 
    float result = 0;
 
    // результат
    for( int i = 0; i < count_test_items; i++ ){
        
        cin >> tmp_user >> tmp_item;
 
        result = raw_average + bias_items[tmp_item] + bias_users[tmp_user];
 
        result = ( result > max_rate ) ? max_rate : result;
 
        cout << fixed << setprecision(4) << result << endl;
    }
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru