· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› Количество разделителей строк

<< . 1 . 2 . 3 .

Посл.отвђт Сообщенiе


Дата: Авг 26, 2004 01:06:57

leo
„заменить все 0D0A на StrLen:word“
А если StrLen попадёт в диапазон печатных символов? Т.е. к примеру встретилось в строке: 6565h - это что, длина или строка "AA"? Не определишь. И как может повлиять на сравнение тот факт, знаешь длину строки или нет? Имхо, никак.


Дата: Авг 26, 2004 04:08:50

cresta
у меня будет просьба: если можно, то с аттачами и комментариями ... А если по какой-либо причине не сможет,давай со мной.
ok.

в смысле ты мне фору даёшь
А надо? В чем она будет измеряться?

volodya
А ну займитесь, займитесь ... не просто вдуешь. Ты пролетишь как фанера над Парижем
Провоцируешь? Не страшно. Если моя реализация окажется хуже в сравнении с чьей-то, то я приобрету новые знания.

leo
Чавой-то я не понял - чего вы от меня хотите.
Реализацию сортировки текстового файла. Параметры имя сортируемого и имя результирующего файла.

Вот и займитесь.
Т.е. я один? Зачем тогда рассуждения о бестолковых пересылках?

2 leo, volodya & cresta
Не буду засорять эту ветку. Обдумаю проект постановки задачи и создам новую ветку в этом же разделе.


Дата: Авг 26, 2004 04:23:56

q_q

У меня уже есть проект, если интересно

„в смысле ты мне фору даёшь
А надо? В чем она будет измеряться? “



Ну давай так, попробуем :)


Дата: Авг 26, 2004 07:43:46 · Поправил: q_q

cresta
У меня уже есть проект, если интересно
Я завел "Сортировка строк текстового файла." Давай про сортировку там, а тут про концы строк.


Дата: Авг 26, 2004 08:27:17

cresta
"И как может повлиять на сравнение тот факт, знаешь длину строки или нет?"
В рассматриваемом случае строки заканчиваются на 0D0A, а не на 0. Поэтому использовать апишную CompareStringA можно только при известных длинах ссhCount. Хотя, конечно, эта функция очень тормозная на русском тексте, особенно без учета регистра. Контроль окончания строки нужен в любом случае. Либо нужно проверять сравниваемые символы каждой из строк на 0D, либо ограничить число сравнений наименьшим значением из двух длин, если они известны.

"StrLen попадёт в диапазон печатных символов?"
Ну и что ? Если при загрузке файла зарезервировать два первых байта под длину первой строки, то в итоге мы получим гибридный аналог паскалевских строк - два байта длина строки, затем сама строка. Не подумай, что я настаиваю на таком варианте - вопрос задан только ради интереса.

q_q
Чего-то ты брат, по-моему, кипятишься. Я уже принес свои извинения за некорректные слова. Так что предлагаю забыть обиды и "дружить семьями".
Что касается проекта, то я уже сказал, что использую Delphi с ассемблерными вставками. Поэтому с чистым asm-проектом помочь не могу. Но определенный опыт в сортировке строк есть. Несколько лет тому назад замутил нехилую прогу для автоматизированного разбора текста и автозагрузки полученной таблицы в БД (сводные данные о земельных участках и их владельцах). Сортировок там хоть отбавляй (и текст по нескольким столбцам, и по числовым значениям). И требования по скорости для интерактивного режима, сам понимаешь, высокие, иначе - нервирует. Вот, правда, оптимальное количество строк оказалось на уровне не более 8-10 тыс. - иначе оператор дуреет и тонет в мусоре.

Резюме: чем могу - помогу, если есть конкретные вопросы.


Дата: Авг 26, 2004 09:02:32

leo
принес свои извинения
Слово не воробей. Либо искупай делом, либо прекращай бить себя кулаком в грудь "...определенный опыт в сортировке строк есть. Несколько лет тому назад замутил нехилую прогу...".


Дата: Авг 26, 2004 09:43:47 · Поправил: leo

q_q
1) Тебе предложенного asm-варианта QuickSort мало ? Или хочешь заполучить законченную прогу ?
Вариант абсолютно рабочий, нужно только заменить invoke CompareFunc на конкретный call функции сравнения двух строк. Если строки кончаются нулем, то для пробы можно использовать CompareString минус 2. А еще проще, чтобы только убедиться, что такой вариант быстрее - попробуй сортировать не строки, а значения dword самих указателей (считай, что это массив целых чисел). Тогда CompareFunc это просто P1-P2.

2) Сам-то чего-нибудь предложи. А то в новой ветке поставил суперзадачу и собираешься ждать по несколько километров однотипных решений ? Хоть бы рыбу предложил для обсуждения.

3) И еще: что значит " в формате ASCII". Русские буквы есть или ASCII 128 ? Если есть, то в какой кодировке ? Сортировка с учетом регистра или нет ? И потом "размер файла до 2^63" - это для прикола или ты встречал такие тексты ? Такими заявами ты народ можешь отпугнуть от обсуждения.


Дата: Авг 26, 2004 10:16:53

leo
Тебе предложенного asm-варианта QuickSort мало
Меня не интересует реализации алгоритмов сортировки на различных языках программирования. Меня интересна полноценная подпрограмма(мы) которые из одного файла делают другой. Особенно та ее(их) часть, которая готовит данные для сортировки.

Сам-то чего-нибудь предложи.
Я не отказываюсь и НАПИШУ код. Для начала необходимо оговорить условия. Если комментариев не будет, то напишу по своим предложенным.

Хоть бы рыбу предложил для обсуждения.
Я не ставлю целью оценить свой код. Напротив хочу увидеть разные подходы.

И еще: что значит ...
Там четко написано, какие коды допустимы до 0FFh.

И потом размер файла до 2^63
Я больше не могу. У меня ntfs

ps если хочешь участвовать, то комментарии и вопросы там.


Дата: Авг 26, 2004 11:36:28

q_q
Причем тут ntfs ? Ты что, весь винт собрался отсортировать ? Я тебя спрашиваю: где ты видел текстовые файлы размером более сотни (ну сотен) мегабайт ? А если видел, то для чего их сортировать по строкам ? При таких размерах разумнее использовать СУБД с индексными файлами и перестраивать индексы, а не сам супер-мега-гига-файл.


Дата: Авг 26, 2004 11:44:26 · Поправил: q_q

leo
Если у тебя есть замечания, то изложи их в той ветке, пожалуйста.
Про 63 бита, чтобы не рассчитывать, что размер файла можно описать 32-ух-битным регистром.


Дата: Авг 26, 2004 16:19:54

leo
CompareStringA, lstrcmpi и др. подобные вещи - не самый быстрый вариант, поэтому я не предполагал их использовать. А в самопальной процедуре проверки можно оговорить любое окончание строки


Дата: Авг 26, 2004 22:51:57

cresta
Ok.
Слушай, если не секрет, что за задачка такая - сортировать файлы по 1/4 миллиона и более строк. Откуда такие файлы берутся и что с ними потом делать ? (От q_q ответа я не добился, может ты пояснишь в двух словах)


Дата: Авг 27, 2004 04:19:51 · Поправил: q_q

leo
От q_q ответа я не добился
Например, log-файлы, файлы сбора информации с каких либо датчиков.

При таких размерах разумнее использовать СУБД с индексными файлами
В теории да, но на практике это не всегда возможно, да и сортировка нужна не постоянная, а разовая для выполнения после нее какой-либо работы.


Дата: Авг 27, 2004 10:42:01

cresta
По поводу длины строк.
К твоему случаю это не относится, т.к. ты, как я понял, сортируешь строки по особому критерию.
А в общем случае при обычной сортировке, знание длины может дать заметный выигрыш, если в файле достаточно много длинных, совпадающих или различающихся в последних символах строк. В этом случае вместо посимвольного сравнения можно сравнивать dword-ы до первого несовпадения, после чего переходить к посимвольному.


Дата: Авг 28, 2004 04:18:19

leo
„если не секрет, что за задачка такая - сортировать файлы по 1/4 миллиона и более строк“

Один товарищ высказал мнение, что платформа .NET жутко быстрая. И договорился до того, что быстрее, чем asm. Самый простенький пример цикла до 20 млрд .NET-программа потратила в 1.6 раза больше времени, при том что компилятор.NET зачем-то сократил количество проходов цикла: за один проход инкрементировал и старший и младший дворд счётчика. (может оттого что цикл пустой).
Этот результат вызвал у товарища некоторые эмоции, и в запале он предположил ещё более странную вещь: если цикл не пустой, а скажем сортировать что-либо, то вот тут .NET и "развернётся всей своей мощью". И предложил сортировать 300000 строк. Согласен, что задача надуманная, и бесперспективная, но просто стало интересно, во сколько раз будет разница во времени.

„можно сравнивать dword-ы до первого несовпадения“
Это хорошо, если известна заранее степень однотипности данных. Если неизвестна - будет в общем случае медленнее.

<< . 1 . 2 . 3 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.070