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

Помогите улучшить неведомую функцию - C++

Восстановить пароль Регистрация
 
NoobCPP11
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 15
14.10.2015, 14:58     Помогите улучшить неведомую функцию #1
Помогите найти хорошую реализацию!!!! Если вам не понятно что делает функция тогда игнорируйте данную тему. А кто понял жду, может кто и поможет реализовать. (пишу в Ubuntu SDK на чистом с++11 без Qt libs)
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
// count вектора {1,2|,-127,5|,9..-2|,1,4} шагом 2 ; {1,2}=unsigned int ; {1,4}=unsigned int
void my_find_pp(vector<char> &mem, unsigned int &j){
    vector< iter_vec_c > vec;
    vector<char> a,b;
    iter_vec_c ivc;
    ivc.Iter=mem.begin();
    ivc.Data=vector<char>(1,0);
    vec.push_back(ivc);
 
    auto it=mem.begin()+j;
    bool flag=1;//1-значение не найдено, выполнить добавление в вектор \ 0-увеличить данные на 1-цу
    while(it<mem.end()){
        a.assign(it,it+j);
        for(auto &itv: vec){
            b.assign(itv.Iter,itv.Iter+j);
            if(a==b){
                flag=0;
                strpp(itv.Data,true);
                break;//цикл for уже не нужен т.к. нашли что искали
            }
        }
        if(flag){
            ivc.Iter=it;
            vec.push_back(ivc);
        }else flag=1;
        it+=j;
    }
    mycout(vec,j);
}//плохая реализация по времени
P.S. Map реализация памяти кушает слишком и возможно шаг в разы больше будет, допустим 128 или 54.

Добавлено через 3 часа 35 минут
a.assign(it,it+j);
b.assign(itv.Iter,itv.Iter+j);
Недавно мысль пришла зачем присваивать значение если и так они хранятся в векторе mem. Попробую "двигать" указатели предварительно скопировать указатель в другую переменную ("буфером" будет) как для "а" так и для "б". Как вы думаете это ускорит её или нет? Мне хочется чтобы функция работала за секунды а не минуты.
P.S. Печально что еще нет ответов. Хотя, знаю что функция странная.

Добавлено через 1 час 12 минут
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
// count вектора {1,2|,-127,5|,9..-2|,1,4} шагом 2 ; {1,2}=unsigned int ; {1,4}=unsigned int
void my_find_pp(vector<char> &mem, unsigned int &j){
    vector< iter_vec_c > vec;
    vector<char>::iterator a,b;
    iter_vec_c ivc;
    ivc.Iter=mem.begin();
    ivc.Data=vector<char>(1,0);
    vec.push_back(ivc);
 
    auto it=mem.begin()+j;
    bool flag=1;//1-значение не найдено, выполнить добавление в вектор \ 0-увеличить данные на 1-цу
    bool fnot=1;//1-равны \ 0-не равны
    while(it<mem.end()){
        for(auto &itv: vec){
            a=it;
            b=itv.Iter;
            for(unsigned int i=0;i<j;++i){
                if(++*a != ++*b){
                    fnot=0;
                    break;//цикл for уже не нужен т.к. не равны значения
                }
            }
            if(fnot){
                flag=0;
                strpp(itv.Data,true);
                break;//цикл for уже не нужен т.к. нашли что искали
            }else fnot=1;
        }
        if(flag){
            ivc.Iter=it;
            vec.push_back(ivc);
        }else flag=1;
        it+=j;
        if(it>=mem.end())clog<<"1)";
    }
    mycout(vec,j);
}//реализация по времени При шаге 8 за ~12 сек. ~6 мегабайт.
Как можно реализовать эту функция чтобы она еще быстрее работала? Гуру программирования отзовитесь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2015, 14:58     Помогите улучшить неведомую функцию
Посмотрите здесь:

Помогите улучшить простой код C++
C++ Помогите, вычислить функцию, пожалуйста!
Помогите составить функцию... C++
C++ Помогите написать рекурсивную функцию
Помогите с передачей массива в функцию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1859 / 1655 / 577
Регистрация: 14.05.2014
Сообщений: 4,760
Записей в блоге: 1
Завершенные тесты: 5
14.10.2015, 15:06     Помогите улучшить неведомую функцию #2
Цитата Сообщение от NoobCPP11 Посмотреть сообщение
Печально что еще нет ответов.
может, потому что
Цитата Сообщение от NoobCPP11 Посмотреть сообщение
Если вам не понятно что делает функция тогда игнорируйте данную тему
?
NoobCPP11
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 15
14.10.2015, 15:23  [ТС]     Помогите улучшить неведомую функцию #3
Я то думал что из множества хоть единицы понимают чужой код , и что твориться в нем. Хорошо что образование помогло вспомнить, что много времени уходит на присвоение значения переменной.
Почтальон
фрилансим
 Аватар для Почтальон
274 / 200 / 28
Регистрация: 22.03.2015
Сообщений: 1,586
Завершенные тесты: 1
14.10.2015, 16:02     Помогите улучшить неведомую функцию #4
Цитата Сообщение от NoobCPP11 Посмотреть сообщение
Я то думал что из множества хоть единицы понимают чужой код , и что твориться в нем. Хорошо что образование помогло вспомнить, что много времени уходит на присвоение значения переменной.
Потому что такой код ужасно читать, ни комментов, не пояснений. Тут проще взять исходник и компильнуть, чем в голове все прокручивать.
И какое такое образование вам подсказало что инициализация переменных длительный процесс ?
NoobCPP11
0 / 0 / 0
Регистрация: 14.10.2015
Сообщений: 15
15.10.2015, 07:05  [ТС]     Помогите улучшить неведомую функцию #5
Так создай исходник и добавь функцию , удали
C++
1
strpp(itv.Data,true);  mycout(vec,j);
и добавь
C++
1
2
3
4
5
6
using namespace std;
struct iter_vec_c
{
    vector<char>::iterator Iter;
    vector<char> Data;
};
Думаю все знают какие библиотеки добавить нужно.
Что за люди вы хотя бы на вопросы отвечали, а не выделяли высказывания и отвечали на него. Средне-специальное образование (техническое) , было много часов программирования и на с++.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1859 / 1655 / 577
Регистрация: 14.05.2014
Сообщений: 4,760
Записей в блоге: 1
Завершенные тесты: 5
15.10.2015, 12:10     Помогите улучшить неведомую функцию #6
NoobCPP11, не проще ли объяснить, что должна делать функция, и что она делает не так, а не разглагольствовать об образовании и прочих, не касающихся проблемы, вещах?
Yandex
Объявления
15.10.2015, 12:10     Помогите улучшить неведомую функцию
Ответ Создать тему
Опции темы

Текущее время: 21:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru