а алгоритм volvo? Что в нем неясного?
Для некоторого упрощения: можно просто читать каждую строку из первого файла искать ее во втором.
Скажем, MD5 (с использованием System.Security.Cryptography он вычисляется в 3 строки).
вот это не понятно мне
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Поиск одинаковых строк в двух файлах |
*оля* |
Сообщение
#21
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
|
volvo |
Сообщение
#22
|
Гость |
Ну смотри. Существует такой алгоритм хеширования - Wiki- > MD5
Так вот, подобный хеш можно получить из любой строки, используя доступные из PascalABC.NET ДотНет-овские классы, а не писать функции для его вычисления самостоятельно: usesВ результате функция вернет хеш переданной в нее строки, который будет уникальным. Совпадение хешей будет означать совпадение строк, для которых они вычислялись. Но это - уже реализация. Что в алгоритме-то непонятно? |
*оля* |
Сообщение
#23
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
Ну смотри. Существует такой алгоритм хеширования - Wiki- > MD5 ... Но это - уже реализация. Что в алгоритме-то непонятно? теперь все понятно, спасибо! во всяком случае пока, сейчас попробую написать полностью программу, тогда думаю возникнут еще вопросы по мере написания) |
*оля* |
Сообщение
#24
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
выдает такую ошибку: Ошибка времени выполнения: В экземпляре объекта не задана ссылка на объект.
в строке a := prov.ComputeHash(a); я наверное что-то не дописала...что бы это могло быть? |
volvo |
Сообщение
#25
|
Гость |
А я предупреждал:
Цитата // это надо будет еще проинициализировать в основной программе В самом начале основной программы надо инициализировать этот объект: prov := new System.Security.Cryptography.MD5CryptoServiceProvider; , только после этого его можно использовать. Обрати внимание, точно так же перед использованием внутри функции инициализируется System.Text.StringBuilder. Любой обзект перед тем, как к нему обращаться, нужно создать... |
*оля* |
Сообщение
#26
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
точно, написано же было, забыла. спасибо, теперь все нормально пока)
|
Lapp |
Сообщение
#27
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
2 volvo:
я все же не понимаю, в чем тут пойнт применения хэшей. Почему нельзя сравнивать сами строки? В задаче нет ничего про секьюрити или там сжатие.. Сравнение строк может быть эффективнее использования хэшей в конечном итоге. Большинство строк начинаются с неравных символов - они сразу отметаются в самом начале. А для вычисления хэша всегда нужно прочитать всю строку. Зачем? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
Сообщение
#28
|
Гость |
Только ради экономии памяти. Прочитать все строки файла в память (а строка может быть длинной), или хранить только хеш (фиксированной, причем небольшой) длины - это две большие разницы. И разницы эти тем больше, чем больше размеры файлов, с которыми нужно работать и чем длиннее в них строки.
В принципе, можно обойтись и без хеширования, конечно; надо будет прогнать пару тестов на больших файлах, посмотреть, насколько быстро MD5 вообще вычисляется, и насколько программа начинает подтормаживать, когда ей проходится работать со строками, а не их хешами... Если торможения не будет (или будет незначительное) - то работать с полными строками. |
Lapp |
Сообщение
#29
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Только ради экономии памяти. да, про память я как-то уже забыл тут.. Прикинул, что 1500 строк (по максимум 255 символов) берут не больше трети мега - и забыл..Да, конечно, если нужно сжимать - то хэш. Но, судя по началу темы ("лишь бы работало")) - скорее всего не нужно.. Сравнить скорость двух подходов: с хэшированием и непосредственным чтением из файла - это действительно интересно. Результат, впрочем, будет сильно зависеть от системного дискового кэша.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
*оля* |
Сообщение
#30
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
идея сравнить 2 метода очень интересная )))
|
*оля* |
Сообщение
#31
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
|
volvo |
Сообщение
#32
|
Гость |
У него есть метод Add:
var За дополнительной информацией о .NET-овских контейнерах - сюда: MSDN -> System.Collections.Generic Namespace |
*оля* |
Сообщение
#33
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
У него есть метод Add: var а потом,для поиска тоже свой метод есть? |
volvo |
Сообщение
#34
|
Гость |
Естественно. Есть метод Find, есть FindAll (для поиска всех совпадений по заданному критерию), есть метод Contains, позволяющий определить просто есть ли в списке заданный элемент, есть IndexOf (чтобы определить индекс элемента, совпадающего с искомой строкой)... Методов - валом...
Мне кажется, или тема уже вышла далеко за рамки раздела "Задачи"? Теперь здесь в основном обсуждаются .NET-овские фишки. Может перенести в "Другие языки"? (я понимаю, что язык тот же, но... Туда и шарписты заходят, может помогут чем). |
*оля* |
Сообщение
#35
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
Естественно. Есть метод Find, есть FindAll (для поиска всех совпадений по заданному критерию), есть метод Contains, позволяющий определить просто есть ли в списке заданный элемент, есть IndexOf (чтобы определить индекс элемента, совпадающего с искомой строкой)... Методов - валом... Мне кажется, или тема уже вышла далеко за рамки раздела "Задачи"? Теперь здесь в основном обсуждаются .NET-овские фишки. Может перенести в "Другие языки"? (я понимаю, что язык тот же, но... Туда и шарписты заходят, может помогут чем). спасибо, все, с .NET-овскими фишками вопросов больше нет) теперь другое... мы считаем хеш сразу для всей строки, а как посчитатеь его не сразу для всей, а для каждого слова в строке отдельно? |
*оля* |
Сообщение
#36
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
что не так в программе?
var. |
*оля* |
Сообщение
#37
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
все, нашла ошибку, сорри
|
Текстовая версия | 6.05.2024 7:54 |