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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Алгоритм Дейкстры http://www.cyberforum.ru/cpp-beginners/thread1181002.html
Привет всем. Делаю для курсовой поиск кратчайшего пути по алгоритму Дейкстры на C++, все сделал вот только преподаватель требует чтобы програма в показывала путь на самой матрице. А я в толк не могу взять как это сделать, помогите... #include<iostream> #include<string.h> #include<stdio.h> #include<stdlib.h> #include<conio.h> using namespace std;
C++ Покупатели продуктового магазина пользуются 10% Помогите решить пожалуйста, вообще не знаю как решить( Покупатели продуктового магазина пользуются 10% скидкой, если покупка состоит из более чем 5 наименований товаров или суммарная стоимость покупки превышает K рублей. Составить ведомость, учитывающую скидки: покупатель, количество наименований купленных товаров, стоимость покупки, стоимость покупки с учетом скидки. Выяснить, сколько... 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. Просмотров 565. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru