Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2016, 23:50   #1
_Gremlin_
Пользователь
 
Регистрация: 01.08.2016
Сообщений: 13
По умолчанию В чем причина долгого выполнения?

Вообщем вот код программы которая считает повторение слов в тексте из файла и пишет в файл сколько раз использовались вот ссылка на код https://www.dropbox.com/sh/bjo8wlqs6...NKdjh5GMa?dl=0 почему долго?
_Gremlin_ вне форума Ответить с цитированием
Старый 02.08.2016, 09:30   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. частое перераспределение памяти для получения КАЖДОГО слова.
(операции по ВЫДЕЛЕНИЮ памяти медленные)
Цитата:
Код:
--
            while (i < line.length() && ((line[i] >= 'a' && line[i] <= 'z') || (line[i] >= 'A' && line[i] <= 'Z') || (line[i] >= 'à' && line[i] <= 'ÿ') || (line[i] >= 'À' && line[i] <= 'ß')))
                subline += line[i++];
--
надо
1. найти начало слова(индекс) k0:=i;
2. найти конец слова(индекс) k1:=i;
3. закончить цикл поиска слова и ОДИН раз получить память(строку) для слова
Код:
subline=copy(line, k0, k1-k0+1) //копировать начиная с индекса k0 в количестве k1-k0+1
2. использование полного перебора для поиска слова
Цитата:
Код:
--
                    for (int j = 0; j < (*k).word.length(), j < subline.length(); j++)
                    {
                        if (subline[j] == (*k).word[j])
                            match++;
                        else
                            break;
                    }
--
использовать УПОРЯДОЧЕННЫЙ(отсортированный) список для ускорения поиска.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 02.08.2016 в 09:33.
evg_m вне форума Ответить с цитированием
Старый 02.08.2016, 13:26   #3
_Gremlin_
Пользователь
 
Регистрация: 01.08.2016
Сообщений: 13
По умолчанию

Пункт 2 можешь с кодом
_Gremlin_ вне форума Ответить с цитированием
Старый 03.08.2016, 10:07   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

http://algolist.manual.ru/search/bin_search.php
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 03.08.2016, 15:33   #5
_Gremlin_
Пользователь
 
Регистрация: 01.08.2016
Сообщений: 13
По умолчанию

Вот очень нужно кстати
_Gremlin_ вне форума Ответить с цитированием
Старый 03.08.2016, 20:06   #6
_Gremlin_
Пользователь
 
Регистрация: 01.08.2016
Сообщений: 13
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Этот алгоритм выходит за рамки массива если тот равен 1 элементу и key>a[m]

Последний раз редактировалось _Gremlin_; 03.08.2016 в 20:14.
_Gremlin_ вне форума Ответить с цитированием
Старый 03.08.2016, 21:44   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

если алгоритм найдет значение, то ОБЯЗАН вернуть ИНДЕКС найденного.
а если нет?...
если алгоритм НЕ находит данные, то он возвращает значение индекса ВНЕ границ.
Цитата:
Этот алгоритм выходит за рамки массива
Цитата:
если тот равен 1 элементу и key>a[m]
т.е. элемента нет и наш поиск заканчивается неудачей.
А в случае НЕУСПЕХА мы ОБЯЗАНЫ вернуть индекс ВНЕ массива.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 03.08.2016, 23:44   #8
_Gremlin_
Пользователь
 
Регистрация: 01.08.2016
Сообщений: 13
По умолчанию

Идет снова сранение и обращение к элементу под индексом 1 , что вне массива и происходит ошибка
_Gremlin_ вне форума Ответить с цитированием
Старый 04.08.2016, 09:20   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

входные данные
начальный индекс Lb =0
у нас всего ОДИН элемент значит ОН ЖЕ будет и последним
конечный индекс Ub =0 !!!!

М= (Lb + Ub)/2; =0!!
ГДЕ обрашение к элементу c индексом 1 ?!
Цитата:
Идет снова сранение и обращение к элементу под индексом 1
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.08.2016, 00:43   #10
_Gremlin_
Пользователь
 
Регистрация: 01.08.2016
Сообщений: 13
По умолчанию

точняк, я конечный брал за size, а надо за size-1
_Gremlin_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не открывает PHP! В чем причина??? Sergey88 PHP 1 10.07.2012 11:11
в чем причина Arassir PHP 2 04.11.2011 12:56
в чем причина ошибки? obsession Паскаль, Turbo Pascal, PascalABC.NET 2 27.10.2011 19:57
В чем причина ошибки? Operator not... Effort Помощь студентам 0 20.06.2011 03:35
2 ошибки в макросе, в чем причина? robbe Microsoft Office Excel 4 15.02.2010 14:03