![]() |
Модераторы: bsa Страницы: (8) Все « Первая ... 2 3 [4] 5 6 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
Чoо |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
по поводу ошибки при освобождении памяти. Удивительно, что ошибки не возникают при определенных условиях.
А атк причина ошибки в том, что память выделялась по одному адресу, а освободить я пытался по другому. я думал, что после return dest fullpatch будет указывать на тот же участок памяти, что и dest. ** ни как не получается. пробовал убрать вышенаписанную функцию, а действия из нее перенести в вызывающуюю ее функцию. Все равно таже ошибка при попытке освободить память и при тех же условиях.
подскажите плз, как можно передать в функцию fopen составной путь (состоящий из пути к файлу и его имени)? *** о.. пошло.. как раз тогда когда собрался сдаться... ошибка в строке
в итоге переполнение массива, та как я не выделил память под нулевой символ. => кривое освобождение памяти Это сообщение отредактировал(а) Чoо - 16.11.2010, 13:07 -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
||||||
|
|||||||
Чoо |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
сделал я задачу сортировки большого файла с использованием индексов. Честно говоря расстроен, так как на сортировку затрачено времени примерно раз в 5 больше (153,755 сек против 28-29 сек без индексов). Отметки времени еще не расставлял, что бы узнать на каком этапе требуется много времени.
вот решение с индексированием:
думаю можно ускорить программу за счет неполного считывания строки при сравнении двух строк по индексу. Хотя прирост скорости в этом случае будет не большим. Кажется, что львиная часть времени уходит на считывание строки по индексу. Это сообщение отредактировал(а) Чoо - 16.11.2010, 18:16 -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Не поможет. Так как из файла читается минимум 1 кластер (2-4 КБ). |
|||
|
||||
Чoо |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
логично.. да. снова не подумал я. А это нормально, что так скорость упала или это я что-то криво написал? ![]() -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Если ты сравниваешь с вариантом "полная загрузка в память", то нет ничего удивительного. Если же до этого ты сортировал как-то иначе из файла в файл, то удивительно.
|
|||
|
||||
Чoо |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
bsa, я сравнивал с вариантом, когда делил исходный файл пополам (точнее на две половины), а потом эти половины сливал снова в один файл.
Добавлено через 56 секунд вот с этим: http://forum.vingrad.ru/index.php?showtopi...t&p=2246278 ![]() -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
вот только как при этом ты уложился в 3 файла?
|
|||
|
||||
Чoо |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
bsa, в смысле как? в один момент времени существовало не более 3х файлов: file_a, file_b и f. после распределения f по первым двум f можно было затирать...
Я сейчас подумал над временной сложностью для последнего решения (первое сейчас еще пересмотрю). Если все учел правильно, то за одну фазу происходит N считываний при делении индексного файла на две части, N считываний из индексного файла (уже половинок, а не целого файла) при слиянии и еще N считываний из сортируемого файла, опять же во время слияния. В итоге имеем утроеное N. И так, полное рассчетное время будет выглядеть как: T = const * 3N * log2n Там где log2 - 2 нижним индексом. Время на получения индексного файла я не учитывал - разовая операция. Занимает примерно секунду при 3х миллионах строк. Добавлено @ 01:11 в первом решении T = const * 2N * log2n. Значит можно быстрее сделать, так как достаточно одного просмотра строк на каждом этапе. странно... может я неправильно считаю временную сложность, так как в этом случае скорость сортировки должна бы была упасть только в 1,5 раза, но не в 5 Это сообщение отредактировал(а) Чoо - 17.11.2010, 01:14 -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Чoо, в первом случае у тебя была последовательная работа с файлами. А во втором - случайный доступ. Он хуже ускоряется буферами, чем первый.
|
|||
|
||||
Чoо |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
bsa, ааа... теперь понятно, спсибо за помощь.
** ну раз с данной задачей справились, перехожу к следующей, а именно: к бинарному поиску. Если успею, сегодня напишу решение ![]() -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
Чoо |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
поиск производится шустро ![]() Сейчас рассмотрю вариант, что предлагали выше ![]() -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
||||
|
|||||
Чoо |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
Dov, ваш вариант интересней будет. разобрал его. У меня слишком много кода и всё усложнено как-то.
-------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
Dov |
|
||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
Эт точно. Такое количество кода трудно переваривать, а то, что комментируешь это хорошо. Вот интересный момент:
Зачем так сложно? ![]() Вот немного переделал, вроде так попроще:
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||
|
|||||
Чoо |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: 4 Всего: 4 |
можно было еще сделать как в главной функции Main ![]() обязательно разберу чуть по-позже, неясности кое-какие есть (в принципе пошагово проверить не проблема, потому не спрашиваю ![]() комментарии... ну с ними проще как-то.. Когда-то пренебрегал подробными комментами, пока не понадобилось "ковырять" старые проекты Добавлено @ 01:12 кстати вот не знал, что так можно:
конечно разобрал что к чему, но такую запись не видел еще ![]() Это сообщение отредактировал(а) Чoо - 18.11.2010, 01:16 -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
Dov |
|
||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
Чoо, я не про это говорю. Зачем сравнивать строки(), если можно сравнить символы?
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |