40

Ответ на пост «"Программисты не умеют программировать"»19

А ведь было же золотое время, когда большие циклы оптимизировали по времени, считая сумму тактов на цикл. И количество байт (не мб!) в программах минимизировали. Но потом пришли языки высокого уровня с кучей неоптимизированных библиотек.
Как то загорелся сделать программу для составления частотного словаря на Паскале. Для него понадобилась подпрограмма сортировки, которая должна была вызываться миллионы тысячи раз. Поэтому написал "пузырёк" на ассемблере. Когда сделал, стал искать аналоги в интернете. Нашёл одну распиаренную, которая на словаре Брокгауза и Евфрона (22мб) после получаса работы ушла в себя... Моя обрабатывала этот файл около 2-3 минут(*). Связался с автором, он рассказал, что написал программу за какой-то грант. А на вопрос, какой алгоритм сортировки использовал, ответил: "А хрен его знает? Взял какую-то готовую библиотеку и использовал модуль сортировки..."

(*) Сейчас на новом железе - 22сек.
*** 1 BROK_EFR.TXW (23270 kb)

Total words in Source: 3250130

sorting...

After sorting: 20,499 sec

After FRQ-counting: 21,887 sec

SortType=0 (alphabetical)

After sort of Destination: 21,887 sec

Total words in Destination: 282033

Total time: 21,965 sec

Average Speed: 1059 kb/sec

Типичный программист

1.5K постов6.7K подписчиков

2
Автор поста оценил этот комментарий

Уже нет. Оптимизирующий компайлер уже давно сможет в 99% сделать лучше, чем опытный программист.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Но, по известному афоризму, бардак оптимизировать невозможно.

0
Автор поста оценил этот комментарий

все почти так, только те, кто в пятом пункте не выделяют средств на рефакторинг и возврат техдолга часто выпадают из конкурентной гонки.


а обычно это выглядит примерно так:

есть две конторы и две команды разработки, которые делают одинаковый продукт. одна команда (А) делает быстро, вторая (Б) качественно

1А - пилит глючное говно за неделю и раскатывает на пользователей
1Б - с любовью делает идеальный продукт

2А - по результатам а/б тестов пилятся новые фичи, старые, которые не зашли пользователям меняются/удаляются
2Б - все еще с любовью делает идеальный продукт

3А - 15я итерация обратной связи от пользователей, продукт удовлетворяет большинству запросов, глюки подпираются костылями, тормоза покрываются дополнительными мощностями
3Б - вылизывают и оптимизируют циклы

4А - продукт зашел аудитории, база пользователей растет, появляется первая прибыль, продукт раскатывается в новые среды. параллельно начинается рефакторинг
4Б - команда готовится к релизу

5А - продукт вошел в цикл, приносит пользу, приносит бабки, занял весь рынок, добавляются фичи, чинится легаси, иногда что-то падает, но в целом работает
5Б - выкатывает альфа версию, отлизанную и оптимизированную, заработает даже на 386х процах, но по функционалу как из пункта 1А.


и что мы имеем по итогу? прошел условный год, денег на разработку потрачено примерно поровну, но:

- первая команда имеет не идеальный, но работающий, пусть и с огрехами продукт, который уже занял весь рынок и приносит бабки на дальнейшую разработку

- вторая команда имеет идеально оптимизированную альфа версию по функционалу чуть лучше чем у первой команды была год назад. пользователей нет, рынок уже занят более функциональным продуктом, бабок на дальнейшую разработку нет

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

"команда (А) делает быстро

1А - пилит глючное говно за неделю и раскатывает на пользователей"
И получается «Моя школа»:
Крик души
Спасибо быстрой команде за их "глючное говно" от учителей и родителей за то, что быстрая команда считает, что "продукт вошел в цикл, приносит пользу, приносит бабки, занял весь рынок, добавляются фичи, чинится легаси, иногда что-то падает, но в целом работает"

показать ответы
0
Автор поста оценил этот комментарий

Я понимаю. Но вопрос был в производительности, а о строгом условии приведения к нижнему регистру речи не шло.


Если у меня сложить числа для "в" и для "В" получатся те же 145 тысяч. Для компьютера слова с прописной буквы и строчной разные, поскольку кодируются разными числами и поэтому хэшируются в разные числа. Не говорилось же, для каких именно целей словарь составляется - а если, например, надо проанализировать частотность заглавных букв? Или надо определить наиболее часто встречающееся прилагательное с большой буквы?


Так а что скажете насчёт производительности - разве резонно для подобных задач использовать ассемблер?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Тогда понятно. я сразу сделал несколько вариантов сортировки и возможность обработки множества файлов по маске для обработки пары гигабайт текстов. Вот тут то и получился заметный выигрыш в скорости.
Usage: FrqDictW <filename/mask> [/e<New Extension>] [/s0-s4] [/c0-c2]

Source file must be in Ansi-code (Win-1251)

s0-s4 Typ of Sort (s0 - default)

c0-c1 Case Sensitive: 0=No, 1=Yes (c0 - default)

c2 DOS-866 output

Думаю, именно для подобных задач ассемблер и нужен. Но основной мой посыл не про программу сортировки, а про то, что при беспорядочных связях с неоптимальными готовыми модулями выигрывает разработчик, но страдают пользователи.

показать ответы
2
Автор поста оценил этот комментарий

На средненьком ноутбуке почти уложился в 2 секунды.

Показываю 15 наиболее встречающихся слов и время выполнения. Дополнительно: железо ноута, код, размер txt-файла.

Могу в яндекс-ссылку всё разом упаковать и отправить, если нужно.

Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

С результатом не согласен. Все частоты здесь почему-то меньше ~10%. Кроме скорости неплохо ещё и верный подсчёт иметь...
145255 в

136324 и

45828 с

42217 на

27505 к

23831 г

23710 не

21797 по

20502 из

19073 его

17372 а

17365 или

14972 от

14425 для

14169 как

13494 при

13234 что

12849 о

12511 но

12133 он

11472 у

11323 т

10745 до

10338 п

показать ответы
0
Автор поста оценил этот комментарий

Все частоты здесь почему-то меньше ~10%

И что в этом ошибочного?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Я не учёл, что сортировка здесь регистрозависимая. Поэтому большая разница в результатах, около 10%

0
Автор поста оценил этот комментарий

Вот мой результат, странно:

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

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

Автор поста оценил этот комментарий

А если была задача оптимизировать именно "пузырёк"? Поэтому выбирать не приходилось, чувак.

14
Автор поста оценил этот комментарий

Не путай коммерческую разработку и хобби. В 90% случаев за идею делать ассемблерные вставки в коммерческом продукте ты получишь черенком от лопаты по хребтине, и не без причин

раскрыть ветку (1)
Автор поста оценил этот комментарий

Поэтому я и матерюсь тихо сам с собою, когда запускаю новую версию браузера. Потому что смысл коммерческой разработки - это дать тормозной продукт с минимальными затратами за кратчайший срок за деньги потерпевших и пострадавших от кое-как склёпанного продукта.

показать ответы
11
Автор поста оценил этот комментарий

Не знаю, че вы там на пузырьке пишите, вот, сортировка из коробки вашего словаря работает за 6.5 сек в режиме отладки:

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

А я время выполнения указал полное, сама сортировка <6 сек.
Creating Frequency Dictionary from Texts

(c)2000-2002 *

*** 1 ┴Ёюъурєч ╘.. ▌эЎшъыюяхфшўхёъшщ ёыютрЁ№ - royallib.ru.txt (23304 kb)

After loading: 0,016 sec

extracting...

After extracting: 12,278 sec

recoding...>

After recoding: 14,384 sec

Total words in Source: 3252991

sorting...

After sorting: 20,156 sec

After FRQ-counting: 21,544 sec

SortType=2 (frq+alphabetical)

After sort of Destination: 25,865 sec

Total words in Destination: 283708

Total time: 25,959 sec

Average Speed: 898 kb/sec

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества