August 12th, 2011

Плохой, негодный донор

Хотел сегодня сделать доброе дело -- сдать кровь, спасти чью-то жизнь. Это у меня семейное -- дедушка имел медаль "Почётный донор СССР".

Не дали!

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

Седой медбрат пощупал мой пульс, сдвинул очки на нос, и сказал -- "У вас, батенька, пульс 120. Никак не могу!"

Сижу сейчас перед компьютером -- пульс 60. Прямо как-то даже обидно.

Ну что же, хоть постарался!

Автомобиль "Победа"



Я застал ещё время, когда можно было их видеть на улицах.

Интересно, зачем в СССР рекламировали автомобили? Ведь никакой конкуренции не было -- на новый автомобиль записывались в очередь за много лет, так что весь произведённый объём был распродан заранее.

Java vs. C++

Постоянно встречаю людей, причём многих -- с университетским образованием, которые ЖЕЛЕЗНО УВЕРЕНЫ, что проект, писанный на Джаве, будучи переписан на Си, работает в пицот тыщ раз быстрее.

Я не поленился. Я, может быть, по призванию не программист, но volens-nolens имею в этой области некоторое образование.

Я написал две программы, которые выполняют абсолютно одинаковые действия, в одинаковой же последовательности. А именно:

1. Открывают текстовый файл c:\testdata.txt. Внутри этого файла -- 65536 строчки со случайными числами от 0 до 65536. Случайные числа были сгенерированы в Microsoft Excel 2010 функцией RANDBETWEEN(0,65536).
2. Читают файл в массив целых чисел unsorted [].
3. Копируют массив unsorted [] в массив toSort [] (зачем -- объясню ниже).
4. Сортируют массив toSort [] алгоритмом сортировки вставками ( O(n2) ).
5. Выводят на консоль слово "Done!".

Чтобы получить более значащие цифры, так как одна сортировка может выполняться слишком быстро, шаги 3 и 4 я делаю 2 раза (можно и больше, но умаешься ждать). Отсюда шаг №3 -- чтобы не сортировать уже отсортированные данные.

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

Программа, написанная на Си, была скомпилирована в exe-файл в Visual Studio 2008. Программа на Джаве была, соответственно, экспортирована в jar из Eclipse.

Мерял время я по обыкновенному цифровому будильнику фирмы Sharp :)

Итого, какие же результаты, сэры мои?

А вот такие! Программа, написанная на Си, выполняет эти действия за 17 секунд. А программа, написанная на Джаве, выполняется за 8 (восемь!) секунд, то-есть, джавовская программа работает в два с гаком раза быстрее!!

О чём тут дальше можно говорить, дорогие сэры, кроме как о том, что постулат "программа, написанная на Си, по определению работает быстрее программы, написанной на Джаве" -- как минимум заслуживает серьёзного пересмотра??!!!!

Сырцы программ, если кому-то захочется перепроверить -- под катом!

Collapse )