|
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
||||||||||||||||
Как использовать оперативную память рационально?06.12.2015, 18:20. Показов 3365. Ответов 55
Метки нет (Все метки)
Здравствуйте. Есть код программы, где я сравниваю 2 текстовых файла, и если n-строка в первом не находит идентичную во втором, то она записывается в новый файл. Файлы большие и при j=167772 вылазит ошибка - Необработанное исключение типа "System.OutOfMemoryException" в mscorlib.dll.
Там прилагается код подобный моему
0
|
||||||||||||||||
| 06.12.2015, 18:20 | |
|
Ответы с готовыми решениями:
55
Можно-ли использовать флэшку как оперативную память? Можно ли использовать оперативную память от ноутбука на компьютере? Windows позволяет использовать не всю оперативную память |
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
| 07.12.2015, 23:14 | |
|
kolorotur, вы по поводу стабильности сортировок почитайте про quicksort особенно ту часть в которой говориться о том что она дает не стабильные результаты, и нечего 90% контейнеров и разработчиков ее используют и в ус не дуют
Storm23 е ще раз повторюсь не нравиться функция хеширования возьмите любую другую, Crc64 к примеру ну или md5 или сами придумайте, мне все равно, а 12000 из 10 000 000... просто решаются введением 2 функции хеширования если появляется коллизия, тут да немного не доработал, но я не думаю что это смертельно особенно если тестить адекватно, вопрос в другом в том что идеальных хеш функций не существует как бы вы себя не убеждали, просто бывает мало данных :-D, а на счет 0,12% еще раз повторюсь это не смертельно и приемлемо решается введением 2 функции хеширования именно для этих 12000 коллизий P. S. тем более реализация HashSet в C# недоступна без лишних тело движений и кто знает может там юзаются в качестве первой и второй хеш функции более слабые функции чем вычисление CRC32
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 07.12.2015, 23:30 | |||
|
Хотите, объясню? По поводу хэшей — если это не достаточно криптостойкий хэш, то он никогда не используется для быстрой проверки на идентичность — именно по причинам, описанным выше и продемонстрированным в вашем тесте. Все эти CRC используются для быстрой проверки на неидентичность и в случае совпадения требуют полной проверки на равенство. А если использовать криптостойкие алгоритмы, то для данной задачи и по памяти и по времени будет проще делать обычную проверку на строки. Прошу прощения, что ответил на не мне адресованный текст.
0
|
|||
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
||
| 08.12.2015, 00:25 | ||
Добавлено через 7 минут а про GetHashCode.... можно вообще поэму написать про корректность его использования :-D так что я с опаской отношусь к алгоритмам и структурам данных в которых используется дефолтный GetHashCode
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 08.12.2015, 00:41 | ||
|
Если есть строка вида "Мама", буквы в которой нужно отсортировать по алфавиту без учета регистра, то любой рабочий алгоритм сортировки сделает один из двух вариантов: 1. "ааМм" 2. "аамМ" Оба варианта соответствуют задаче "отсортировать без учета регистра", в обоих вариантах массив отсортирован. Устойчивым алгоритмом сортировки называют такой, который всегда выдаст первый вариант, а неустойчивым — который может выдать второй вариант. Еще раз обращаю внимание: в обоих случаях ряд отсортирован в соответствии с поставленным условием. При этом устойчивость не является необходимым свойством алгоритма сортировки (любого, не только быстрой) — это может быть "приятным дополнением". Вот если бы алгоритм выдал решение вида "амМа", то он был бы вообще не рабочий, т.к. задача по сортировке не выполнена, даже если бы такой вариант был только в 5% случаев, как предлагаете вы со своим решением.
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 08.12.2015, 00:58 | ||
|
Если "М" во входном массиве была перед "м", то в устойчивой сортировке в выходном она так же будет идти перед "м".
0
|
||
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
| 08.12.2015, 01:15 | |
|
видимо на на строке Мама Вы его и использовали...
эххх Недостатки QuckSort: Сильно деградирует по скорости при неудачных выборах опорных элементов, что может случиться при неудачных входных данных. Этого можно избежать, используя такие модификации алгоритма, как Introsort, или вероятностно, выбирая опорный элемент случайно, а не фиксированным образом. Наивная реализация алгоритма может привести к ошибке переполнения стека, так как ей может потребоваться сделать вложенных рекурсивных вызовов. В улучшенных реализациях, в которых рекурсивный вызов происходит только для сортировки меньшей из двух частей массива Неустойчив — если требуется устойчивость, приходится расширять ключ. Факт не в том что Qsort не будет сортировать в 5% случаев, а в том что при малой длине ключа он МОЖЕТ некорректно сработать на пример при сортировке от большего к меньшему СЛУЧАЙНО может затесаться 1 или 2 элемента которые действительно будут не на своих местах к примеру у вас есть набор данных "111 111" "123 333" "123 222" "145 444" "145 555" и соответственно после сортировки quickSort вы ожидаете увидеть "111 111" "123 222" "123 333" "145 444" "145 555" но тут у вас случайно случаеться сюрпрайз т. к. алгоритмом был выбран не верный опорный элемент "111 111" "123 333" "123 222" "145 444" "145 555" вроде и отсортирован, да не совсем, и да ошибку такую сразу сложно заметить, но видите ли такую коллизию очень сложно подобрать т. к. для этого нужно реально "плохие" данные и неудачный компаратор типа основанного на дефолтном GetHashCode, а так да библиотечные функции в 90% случаев вылизаны очень и очень сильно
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||
| 08.12.2015, 01:49 | ||||
|
Хотелось бы увидеь конкретный пример данных и выбранного опорного элемента, подтверждающих ваше утверждение. Ну или хотя бы ссылку на опубликованную работу, где обсуждаются такие серьезные проблемы быстрой сортировки. Автора и год публикации будет достаточно — дальше сам найду. Именно отсюда и растут ноги у (довольно странных) алгоритмов перемешивания, где используется сортировка с компаратором вида return random.Next();И что конкретно означают "плохие" данные, если все упирается в компаратор и его реализацию? Ведите себя прилично — не на базаре же, время успокоиться и написать, не паясничая, — имеется.
0
|
||||
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
| 08.12.2015, 03:06 | |
|
думаю далеко ходить не надо тут же на форуме: Быстрая сортировка Хоара от mik-a-el и коммент к реализации раз
Статья на Хабре с наивной реализацией алгоритма два и не надо про то что в C# подобного нет, для данной сортировки может и нет, все же "детские болезни" именно данной сортировки за 40 лет научились решать, а вот многострадальный GetHashCode все склоняют в хвост и в гриву а он составная часть мнооогих компараторов и реализаций алгоритмов и структур данных
0
|
|
|
Master of Orion
|
|
| 08.12.2015, 04:55 | |
|
kolorotur, окей, соглашусь. Хотя тут стоит обговаривать. Сортировка, которая меняет расположение элементов, но делает это всегда предсказуема тоже в некотором роде устойчивая.
агерон, GetHashCode никогда не считался гарантом одинаковости. Он говорит лишь о том, что если он различается, то объекты разные. ВСЁ. элементарная логика говорит о том, что a => b не означает, что b => a.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||
| 08.12.2015, 10:25 | |||||
|
Но про описанную вами проблему сортировки (точнее, ее отсутствия) там, к сожалению, ни слова не сказано. Неупорядочивание части массива пока что нигде не упоминается.
1
|
|||||
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|||||||
| 08.12.2015, 11:36 | |||||||
|
нуууу... вы явно как минимум не внимательны
цитата с статьи хабра Наивный QuickSort
Алгоритм неустойчив, то есть он меняет элементы с одинаковыми значениями. На примере сортировки чисел это ни как не сказывается, но если мы сортируем массив объектов по какому-либо свойству то это существенно, так как в результате нескольких вызовов метода Sort будем получать массив элементы которого отличаются порядком. ну уж извените если прямая реализация алгоритма QuickSort 3 раза мне выдаст "111 111" "123 222" "123 333" "145 444" "145 555" а на четвертый раз с перепугу я получу "111 111" "123 333" "123 222" "145 444" "145 555" я как минимум буду в недоумении, заметь что "детские болезни" реализации были побеждены к версии Net 4.5 т. е. на доводку алгоритма ушло минимум 10 лет! или сколько там прошло после выпуска первого .Net И согласитесь что внутри функция Sort ну как минимум сильно изменилась а как максимум совсем слабо связана с QickSort
0
|
|||||||
|
Master of Orion
|
||
| 08.12.2015, 12:12 | ||
|
Добавлено через 1 минуту Это значит что в 100000 раз можно получить такую последовательность: "123 222" "111 111" "145 555" "123 333" "145 444" что конечно же никогда не случиться ни с одним из алгоритмов сортировки (не путать с реализацией).
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||
| 08.12.2015, 12:36 | |||||
|
Если вы сортируете массив строк по всем символам, то второй результат у вас никогда не получится, хотя вы, похоже, пытаетесь убедить меня в обратном.
0
|
|||||
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
| 08.12.2015, 12:48 | |
|
будьте при своем мнении, что у вас все хорошо, и что QuckSort алгоритм который всегда выдает стабильный результат, по сути начали за здравие кончили за упокой я думаю что пора прекратить этот флейм
0
|
|
|
Master of Orion
|
|
| 08.12.2015, 12:56 | |
|
агерон, сортировка либо выполнена, либо не вы полнена. Алгоритмы, которые выполняют сортировку почти всегда - не существует и они нигде не используются. Даже эзотерические сортировки вроде гномьей выполняются, пока массив не отсортируется. Что считать ключом сортировки - всю строку, какие-то символы, рандом - совершенно не важно. Важно, что в итоге после выполнения сортировки верен предикат
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 08.12.2015, 13:01 | |||
![]() Вам лишь говорят о том, что он всегда сортирует по заданному ключу и никогда не нарушает предикат, описанный выше товарищем Psilon, а вы пытаетесь доказать обратное, но так и не предоставили конкретных примеров, где это происходит.
0
|
|||
|
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
||||||
| 09.12.2015, 00:17 [ТС] | ||||||
|
kolorotur, Зашел сегодня спросить еще кое-что и увидел такой ожесточенный спор, в котором я понял немногое. Собственно, что хотел спросить. А если мне при сравнении файлов нужно будет добавить еще пару условий? Т.е. Есть 2 текстовых файла, в них такие же строки, но они уже будут раза в 2-3 меньше (3 ляма строк и 50 тысяч). Мне их нужно будет сравнить, но уже посимвольно в каждой строке. Задать переменную, которая записывает одинаковое кол-во символов, и если оно входит в какой-то определенный диапазон, например, больше 100 и меньше 500, то строка записывается в новый текстовый файл.
0
|
||||||
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
| 10.12.2015, 01:55 | |
|
а теперь объясни снова и внятно по пунктам
0
|
|
|
1 / 1 / 0
Регистрация: 11.09.2015
Сообщений: 25
|
|
| 10.12.2015, 13:50 [ТС] | |
|
агерон, Есть 2 текстовых файла, в каждом из которых есть n-ое кол-во строк. Каждая строка теперь составляет ровно 17 символов. Мне нужно также сравнить эти 2 файла, только узнать сколько символов совпадает в каждой строке из первого файла со строками из второго. Мне нужно, чтоб строки совпадали ровно на 10 символов из 17 (позиция также учитывается, если в первой строке символ "3" стоит на третьем месте, а во второй этот же символ стоит на пятом, то за совпадение это не считается). Далее, если для первой строки из первого файла мы нашли от 100 до 500 строк, удовлетворяющих нашему условию (кол-во одинаковых символов = 10), из второго файла, то мы записываем эту строку в новый текстовый файл. И так перебирая каждую.
Я создавал списки для 1-го и 2-го файла. Запустил цикл перебора строк в 1-ом, внутри него запустил цикл перебора строк во втором, внутри него запустил цикл перебора символов. Поставил условие, если кол-во совпадений в строках равен 10, то Увеличить переменную R на 1, проходит перебор строк во втором файле, я смотрю чему равно R, если переменная насобирала от 100 до 500 таких строк, то я записываю строку из первого файла в новый файл.
0
|
|
| 10.12.2015, 13:50 | |
|
Опасно ли использовать оперативную память без VREF
Как более рационально использовать контрол для справочника? Как освободить оперативную память? Как поставить оперативную память!? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|