Форум программистов, компьютерный форум 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
19.05.2014, 17:52  [ТС]     Оптимизация программы по памяти
Цитата Сообщение от stima Посмотреть сообщение
Для N данных это (N * N * sizeof(float) + N * sizeof(float) + N * sizeof(float)) чистой + еще мета информация байт:
Где метаинформация это:
1. Для массивов bias_users и bias_items ее практически нет (sizeof(vector) + размер хедера аллокации).
2. Для массива table_learn это N рамеров хедеров аллокации.

Так вот, можно воспользоватся пулом памяти. Который избавит от метаинформации. Общая идея такая: аллоцируем N * K памяти. а потом раздаем K раз, вместо K раз аллокации по N.

Можете сделать сами это не сложно, если не мудрить. А лучше воспользоватся boost::pool
Спасибо!
Убрал несколько массивов по памяти нормально. Теперь по скорости не проходит. Что по скорости можно сделать?

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
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <string>
#include <iomanip>
 
 
using namespace std;
 
const int MAX_SIZE_USER = 10000;                // максимальное количество пользователей или фильмов
 
typedef vector<unsigned short> typ_short;
 
/**
* @description Вычисление значения BIAS.
* @params сумма всех оценок, количество оценок, общий средний рейтинг
* @return BIAS значение 
*/
float bias( int sum, int count, float average ){
    return (sum / count ) - average;
}
 
int main() {
    
    short tmp_user, tmp_item, tmp_rate;         // для чтения таблиц
    short max_rate;                             // максимально возможная оценка 
    short count_user, count_items;              // количество пользователей и фильмов
 
    int count_learn_items, count_test_items;    // количество оцененных и неоцененных фильмов   
    int tmp_count_user;
    int tmp_count_item;
    int tmp_value_user;
    int tmp_value_item;
 
    float raw_average = 0;                      // общее среднее значение оценок
    float result = 0;
 
    vector<typ_short> table_learn;
    typ_short tmp;
 
    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 );
 
    //читаем данные обучаемой таблицы и формируем матрицу
    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;       // общий рейтинг
 
 
 
    //читаем данные обучаемой таблицы и формируем матрицу
    for( int i = 0; i < count_test_items; i++ ){
        
        cin >> tmp_user >> tmp_item;
 
        tmp_value_user = tmp_value_item = tmp_count_item = tmp_count_user = 0;
 
        for (int j = 0; j < count_items; j++)
        {
            if( table_learn[j][tmp_item] && ++tmp_count_item)
                tmp_value_item += table_learn[j][tmp_item];
        }
 
        for( int j = 0; j < count_user; j++ )
        {
            if( table_learn[tmp_user][j] && ++tmp_count_user )
                tmp_value_user += table_learn[tmp_user][j];
        }
 
        result = raw_average + bias( tmp_value_user, tmp_count_user, raw_average ) + bias( tmp_value_item, tmp_count_item, raw_average );
 
        result = ( result > max_rate ) ? max_rate : result;
 
        cout << fixed << setprecision(4) << result << endl;
    }
 
    return 0;
}
 
Текущее время: 16:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru