Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как можно переделать прогу?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Как можно переделать прогу?
Имя
Сообщение << Старые топики   Новые топики >>
Как можно переделать прогу? - 2010-06-02 13:56:17.133333   
Sidjey

Сообщений: 25
Оценки: 0
Присоединился: 2010-05-20 19:05:36.610000
вот исходник
#include &lt;iostream&gt; //Реализует ввод и вывод #include &lt;fstream&gt; #include &lt;vector&gt; //Определяется динамический массив #include &lt;algorithm&gt; #include &lt;windows.h&gt; //GetTickCount #include "tree.h" #include "word.h" using namespace std; //Использование имен из пространства std по-умолчанию bool parse(string& str) { if (str.length() &lt; 4) return false; const char symbols[] = {44, 46, 33, 63, 34, 60, 62, 40, 41, 59, 39, 58, 61, 92, 47}; for (int j=0, len = str.length(); j&lt;len; j++) //Функция len используется для проверки пустой строковой переменной { for (int i=0; i&lt;sizeof(symbols); i++) { if (str[j] == symbols[i]) { i = 0; str.erase(j,1); if ( j &gt; 0 ) j--; len--; } } } if (str.length() &lt; 4) return false; } int compare(const void *obj1, const void *obj2) { CompareByCount cmp; // используется на втором этапе программы для сортировки вектора с сортировкой по уменьшению частоты появления этого слова return cmp.more((Word*)obj1, (Word*)obj2); } int main(int argc, char *argv[]) { DWORD startTime = GetTickCount(); BinarySearchTree&lt;Word*&gt; tree; CompareByStr cmp; //используется на первом этапе программы при обработки файла и для подсчета слов, сортировка выполняется по словам tree.setComparer(&cmp); vector&lt;Word*&gt; v; ifstream file("1.txt"); //Открытие файла с текстом if (!file.is_open()) { cout &lt;&lt; "It is impossible to open a file 1.txt" &lt;&lt; endl; system("pause"); return 1; } string str; //представление строк Word w, *pWord; do { file &gt;&gt; str; if (!parse(str)) continue; w.set(str); // Если нашли слово в дереве, то увеличиваем счетчик на единицу if((pWord = tree.search(&w)) != NULL) pWord-&gt;inc(); else { // иначе добавляем новое слово в дерево pWord = new Word(str); tree.insert(pWord); // добаляем слово в вектор v.push_back(pWord); } } while (!file.eof()); file.close(); // Сортируем вектор по полю count sort(v.begin(), v.end(), compare); //Начало и возврат итератора и сравнение ofstream out("2.txt"); //Записываем в файл вывод слов if (!out.is_open()) { cout &lt;&lt; "It is impossible to open a file 2.txt" &lt;&lt; endl; system("pause"); return 1; } for (vector&lt;Word*&gt;::iterator i = v.begin(), end = v.end(); i != end; i++) { out &lt;&lt; **i; } out.close(); cout &lt;&lt;"The program has successfully deduced words in a file 2.txt...\nTime: " &lt;&lt; (GetTickCount() - startTime) /1000.0 &lt;&lt;" second(s)\n" &lt;&lt; endl; system("pause"); return 0; }
Помогите плиз, надо чтобы сортировка происходила намного быстрее чем сейчас! компилировать через release… Заранее спасиб!
Post #: 1
RE: Как можно переделать прогу? - 2010-06-02 14:18:08.546666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Хороший пример того, как не нужно писать комментарии к коду.

З.Ы. что за сортировка? Какая изначальная задача?
Post #: 2
RE: Как можно переделать прогу? - 2010-06-02 16:13:44.726666   
Sidjey

Сообщений: 25
Оценки: 0
Присоединился: 2010-05-20 19:05:36.610000
Нужно осуществить сортировку с наименьшим временем текста романа ,,война и мир" он открывает файл 1.тхт, записывать отсортированные слова(больше 4 букв) в файл 2.тхт….
Post #: 3
RE: Как можно переделать прогу? - 2010-06-02 16:20:21.100000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Общее:

http://ru.wikipedia.org/wiki/Алгоритм_сортировки
http://algolist.manual.ru/sort/index.php

А вообще врядли получится сильно быстрее, чем std::sort. Разве что как-то соптимизируешь компаратор.
Post #: 4
RE: Как можно переделать прогу? - 2010-06-02 17:22:40.643333   
Sidjey

Сообщений: 25
Оценки: 0
Присоединился: 2010-05-20 19:05:36.610000
хммм… ну мне как бы просто говорили, что можно через многопоточность эту прогу переделать, но вот я хоть и читал и тд, все равно не могу сделать = (((
Post #: 5
RE: Как можно переделать прогу? - 2010-06-02 17:41:15.490000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Может это поможет: http://forum.codeby.net/lofiversion/index.php/t12450.html
Post #: 6
RE: Как можно переделать прогу? - 2010-06-02 17:43:17.320000   
Sidjey

Сообщений: 25
Оценки: 0
Присоединился: 2010-05-20 19:05:36.610000
блин = ((( это конечно хорошо, но блин, все равно не вкатывает мне в мозг многопоточность = (((((
Post #: 7
RE: Как можно переделать прогу? - 2010-06-02 18:18:30.376666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Ну не делай ;)
Post #: 8
RE: Как можно переделать прогу? - 2010-06-02 18:20:58.450000   
Sidjey

Сообщений: 25
Оценки: 0
Присоединился: 2010-05-20 19:05:36.610000
= (((( да с удовольствием = (((( но нужно эту прогу последнюю сдать = ((( она полностью работает! но задача, написать программу которая сортирует не больше 1,5 сек… а у меня сортирует за 2 сек
Post #: 9
RE: Как можно переделать прогу? - 2010-06-02 18:26:09.903333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: _SaZ_

Может это поможет: http://forum.codeby.net/lofiversion/index.php/t12450.html


какой лютый ад. и за что они с Хоаром так?
Post #: 10
RE: Как можно переделать прогу? - 2010-06-02 19:08:45.033333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
В написанном не разбирался, просто гугл…

P.S. возми комп пошустрее ;)
Post #: 11
RE: Как можно переделать прогу? - 2010-06-02 19:10:53.576666   
Sidjey

Сообщений: 25
Оценки: 0
Присоединился: 2010-05-20 19:05:36.610000

quote:

ORIGINAL: _SaZ_

В написанном не разбирался, просто гугл…

P.S. возми комп пошустрее ;)


=)))) если б все так просто было б =)))) там препод принимает все проги на своем ноуте!!!!
Post #: 12
RE: Как можно переделать прогу? - 2010-06-02 19:14:19.713333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Sidjey, а расскажи-ка мне, что у тебя там за BinarySearchTree, а? Это ведь двоичное дерево поиска, не так ли? Ну а если я прав, то нахрена тебе тогда массив и сортировка этого массива?
Post #: 13
RE: Как можно переделать прогу? - 2010-06-02 22:24:43.720000   
Sidjey

Сообщений: 25
Оценки: 0
Присоединился: 2010-05-20 19:05:36.610000

quote:

ORIGINAL: rgo

Sidjey, а расскажи-ка мне, что у тебя там за BinarySearchTree, а? Это ведь двоичное дерево поиска, не так ли? Ну а если я прав, то нахрена тебе тогда массив и сортировка этого массива?


да это так, ну записываем в массив или в дерево слова, а потом вроде как сортируем…
Post #: 14
RE: Как можно переделать прогу? - 2010-06-02 22:43:25.373333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Ты знаешь как работает двоичное дерево поиска? Оно, по-сути, отсортировывает всё, что ты туда запихиваешь. И если тебе надо отсортировать кучу слов и ты эти слова запихал в дерево, тебе лишь надо извлечь эти слова из дерева. Надо просто обойти все узлы дерева, в нужном порядке (в прямом или в обратном), и вывести содержимое этих узлов. Почитай про сортировку вставкой в двоичное дерево. Ты её уже сделал, тебе остался последний шаг: вывод результата.
Post #: 15
RE: Как можно переделать прогу? - 2010-06-03 14:34:04.903333   
m_Sam

Сообщений: 15
Оценки: 0
Присоединился: 2010-05-13 12:11:24.050000
quote:

ORIGINAL: Sidjey

Нужно осуществить сортировку с наименьшим временем текста романа ,,война и мир" он открывает файл 1.тхт, записывать отсортированные слова(больше 4 букв) в файл 2.тхт….


Возможно указывая в задании роман ,,война и мир" имелось ввиду, что файл очень большой (неизвестно на самом деле когда появилась такая задача=) ) и его надо сортировать не сильно расходуя оперативную память ?


А если делать так как предлагаешь ты, то почему просто не создать vector<string> , наполнить его словами удовлетворяющими критерий и применить метод ::sort( cmpFnc ) , тобиш QuickSort ?
Единственное что тут не так, так это то что сам вектор будет огромен )

Если же на память поплевать, то можно сделать распределяющую сортировку(RadixSort), она должна быть в этом варианте даже быстрей быстрой (QuickSort )
Post #: 16
RE: Как можно переделать прогу? - 2010-06-03 14:51:43.256666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
list вместо вектора ;)
Post #: 17
RE: Как можно переделать прогу? - 2010-06-04 06:10:37.010000   
Sidjey

Сообщений: 25
Оценки: 0
Присоединился: 2010-05-20 19:05:36.610000
Огромное всем спасибо!!! =) у меня все таки получилось сделать прогу, но делал я теперь через хэш таблицы =)
Post #: 18
RE: Как можно переделать прогу? - 2010-06-04 12:15:35.376666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Ну выкладывай, хвастайся.
Post #: 19
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Как можно переделать прогу?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.