thedeemon: (office)
[personal profile] thedeemon
Некие люди занимались верификацией всякого кода на Джаве и столкнулись с трудностями при доказательстве корректности TimSort'a - алгоритма сортировки, издавна используемого в Питоне и Джаве. Оказалось, что он некорректен, на некоторых данных не работает вообще.

Proving that Android’s, Java’s and Python’s sorting algorithm is broken (and showing how to fix it)

Кому вообще нужны эти теорем-пруверы? Питон, тесты, махание руками!

Date: 2015-02-25 06:16 am (UTC)
From: [identity profile] deni-ok.livejournal.com
"The reaction of the Java developer community to our report is somewhat disappointing"

Date: 2015-02-25 06:20 am (UTC)
From: [identity profile] worm-ii.livejournal.com
Дык, если мне память не изменяет, только-только 32-разрядный quick sort пофиксили на массивах длиной более 2^31, чего ж Вы хотите от более сложных алгоритмов?

Ай, память подвела-таки, двоичный поиск же, не quick sort:
http://habrahabr.ru/post/91605/
Edited Date: 2015-02-25 06:23 am (UTC)

Date: 2015-02-25 07:05 am (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Фигасе. А им так гордились...

Date: 2015-02-25 08:37 am (UTC)
From: [identity profile] aruslan.livejournal.com
Блеск. И нищета.

Date: 2015-02-25 09:37 am (UTC)
From: [identity profile] urod.livejournal.com
Похихикал.

Там ссылка и на баг с бинарным поиском.

Date: 2015-02-25 09:49 am (UTC)
From: [identity profile] sorhed.livejournal.com
Кем, тимсортом? Это ж хак. Не то что бы в этом было что-то плохое...

Date: 2015-02-25 09:50 am (UTC)
From: [identity profile] sorhed.livejournal.com
Раз за столько лет в продакшне не вылезало (при всей широте применения) — значит, minor issue. Так-то, конечно, теоретически интересно, но не более того.

Date: 2015-02-25 09:56 am (UTC)
From: [identity profile] nivanych.livejournal.com
Я ещё понимаю реакцию на "broken".
Но на
> (and showing how to fix it)
надо ж радоваться полчаса!

Date: 2015-02-25 10:31 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
да нет, пофиксили же, но топорным увеличением runLen.

Date: 2015-02-25 10:31 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Так правильное решение, вероятно, медленнее, потому джавщики предпочли просто размер буфера увеличить, авось проканает. Вон в питоне буфер побольше, там канает, хоть и ошибка в логике.

Date: 2015-02-25 10:36 am (UTC)
From: [identity profile] nivanych.livejournal.com
Эпично, эпично.
Надеюсь, расползётся и побольше народу узнает.
Например, средствами чОрного пеара —
"Воон там какие-то придурки со своей математикой припёрлись и чо оно получили? Малозначительную issue нашли. Всё бы им в своей ерунде ковыряться, а не работать!" ;-)
Можно гораздо красочнее расписать, если чуть постараться ;-)

Date: 2015-02-25 12:23 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
Быстро пробежался глазами, не увидел proof of concept демонстрации бага. Стоит ли читать внимательно? Какого минимального размера должны быть данные для некорректной работы алгоритма?
Edited Date: 2015-02-25 12:24 pm (UTC)

Date: 2015-02-25 01:33 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Более 249 элементов. Наиболее мощный на сегодня суперкомпьютер имеет память размером только 250 байт.

Date: 2015-02-25 01:35 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Да, в предлагаемом решении на одно условие в цикле больше.

Date: 2015-02-25 02:27 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Пункты 1.1 и 1.3, не?

Date: 2015-02-25 02:30 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
В примере, на котором джава падает, 67 миллионов элементов всего.

Date: 2015-02-25 03:34 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Ну, во-первых, это красиво.

Date: 2015-02-25 03:46 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Не повезло.

Date: 2015-02-25 06:37 pm (UTC)
From: [identity profile] sleepy-drago.livejournal.com
практики как хардкодили константы так и хардкодят. Не то что я не сочувствую этим донкихотам от верификации, но как то не существенно оно пока.

Date: 2015-02-25 09:52 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
Да, спасибо, проглядел.
Массивы в 67'000'000 элементов вполне встречаются (как раз тот размер, который ещё можно локально обрабатывать без mapreduce)

git clone https://github.com/abstools/java-timsort-bug.git
cd java-timsort-bug
javac *.java
java TestTimSort 67108864

Date: 2015-02-26 08:52 pm (UTC)
From: [identity profile] theiced.livejournal.com
пфф... вот у людей проблемы (https://bugs.php.net/bug.php?id=50916 и
https://bugs.php.net/bug.php?id=61095) так проблемы, а вы тут с иногда неработающей сортировкой лезете :)

Date: 2015-02-27 06:54 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Там это не проблемы, это норма. :)

Profile

thedeemon: (Default)
Dmitry Popov

April 2026

S M T W T F S
   1 234
567891011
12131415161718
19202122232425
2627282930  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 25th, 2026 06:38 pm
Powered by Dreamwidth Studios