LINUX.ORG.RU
ФорумTalks

Информатика --- наука экспериментальная?


0

0

Стандартная библиотека java
java/util/Collections.java

Сначала коммент (который как известно рулит)

 /*
     * Tuning parameters for algorithms - Many of the List algorithms have
     * two implementations, one of which is appropriate for RandomAccess
     * lists, the other for "sequential."  Often, the random access variant
     * yields better performance on small sequential access lists.  The
     * tuning  parameters below determine the cutoff point for what constitutes
     * a "small" sequential access list for each algorithm.  The values below
     * were >>>empirically determined<<< to work well for LinkedList. Hopefully
     * they should be reasonable for other sequential access List
     * implementations.  Those doing performance work on this code would
     * do well to validate the values of these parameters from time to time.
     * (The first word of each tuning parameter name is the algorithm to which
     * it applies.)
     */

Далее следуют собственно <<empirically determined>> константы, которые надо понимать ограничивают область применения (эффективную) тех или иных алгоритмов в зависимости от количества элементов коллекции:
    private static final int BINARYSEARCH_THRESHOLD   = 5000;
    private static final int REVERSE_THRESHOLD        =   18;
    private static final int SHUFFLE_THRESHOLD        =    5;
    private static final int FILL_THRESHOLD           =   25;
    private static final int ROTATE_THRESHOLD         =  100;
    private static final int COPY_THRESHOLD           =   10;
    private static final int REPLACEALL_THRESHOLD     =   11;
    private static final int INDEXOFSUBLIST_THRESHOLD =   35;

Применяется это дело так (пример взят тамже):

public static int binarySearch(List list, Object key) {
        if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD)
            return indexedBinarySearch(list, key);
        else
            return iteratorBinarySearch(list, key);
    }

Всё это конечно замечательно, но почему private static final int BINARYSEARCH_THRESHOLD   = 5000, а не 4000, а может 6000.

А, понятно <<empirically determined>>.

Выходит информатика --- наука экспериментальная, профайлер силнее Кнута :)



 

а ты думал...

тезис Чарча слыхал? его никто не доказал, но никто и не опровергнул, а информатика как наука тока на нем и основона - весь бардак от туда пошёл.

Pi ★★★★★
()
Ответ на: комментарий от Pi

Не Чарча, а Черча. Доказать его впринципе невозможно да и не надо ето. Как, например, не надо физику доказывать, что окружающая реальность, данная в ощущениях, объективно существует и вся физика вообще имеет смысл. Это как и тезис Черча-Тьюрига вопросы глубоко философско-болтологического плана.

GameMagister
()
Ответ на: комментарий от GameMagister

Хочется всё же вернутся к примеру. Он то как раз имеет не философско-болтологический характер. Речь идет о конкретных цифрах.

Я вот например доверяю ребятам писавшим Collections.java, как программистам, т.к. уверен что в данной области они разбираются получше меня. И вот такие умные ребята не нашли ничего лучшего, как подбирать константы, для того чтобы алгоритмы работали эффективно, методом тыка.

Расматриваемая задача между прочим не выглядит гиперсложной. Товарищ Кнут и иже с ним годятся только на сферических коней в ваккуме? Обычные вот инженеры когда мост проектируют, могут строго доказать что он не упадет (если его конечно путем по проекту построят). При проектировании программ подобного не наблюдается :(

guardian
() автор топика

>Информатика --- наука экспериментальная?

Информатика это вообще не наука, ибо у нее нет объекта изучения. Кто даст более менее конкретное определение, что такое информация?

anonymous
()
Ответ на: комментарий от anonymous

Так кто даст определение понятию "природа" и кто сможет доказать что "оно" объективно существует ? А физика вроде наука ...

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

anonymous
()
Ответ на: комментарий от anonymous

>Кто даст более менее конкретное определение, что такое информация?

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

borisych ★★★★★
()
Ответ на: комментарий от guardian

>Расматриваемая задача между прочим не выглядит гиперсложной. Товарищ Кнут и иже с ним годятся только на сферических коней в ваккуме?

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

>Обычные вот инженеры когда мост проектируют, могут строго доказать что он не упадет (если его конечно путем по проекту построят). При проектировании программ подобного не наблюдается :(

Если бы они могли строго доказать это, то самолеты бы не падали, а мосты бы не ломались. Природа штука до конца непредсказуемая.

anonymous
()
Ответ на: комментарий от Pi

>тезис Чарча слыхал? его никто не доказал, но никто и не опровергнул, а информатика как наука тока на нем и основона - весь бардак от туда пошёл.

а можно поподробнее. Как вообще информатика связана с тезисом Тьюринга ? О каком именно бардаке идет речь ?

CMEPTb
()
Ответ на: комментарий от CMEPTb

Так тезис Черча и определяет один из предметов изучения современной информатики - алгоритмы. И говорит, что алгоритмы будут представляться такой-то мат. моделью (ями) и что эта модель соответсвует интуитивному представлению об алгоритме.

anonymous
()
Ответ на: комментарий от anonymous

класс обсчитываемых функций совподает с классом рекурсивных функций

Pi ★★★★★
()

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

JavaHarlal
()
Ответ на: комментарий от guardian

> т.к. уверен что в данной области они разбираются получше меня

А зря. Дерьмо они. Параметры GC, например, подобрали отвратительно, да и сам GC в JVM сделан как будто первокурсниками недоученными, насктолько хреновый, нелепый и тормозной получился.

> И вот такие умные ребята не нашли ничего лучшего, как подбирать константы, для того чтобы алгоритмы работали эффективно, методом тыка.

У тебя есть решение получше?

> Обычные вот инженеры когда мост проектируют, могут строго доказать что он не упадет (если его конечно путем по проекту построят)

Когда инженеры проектируют мост, у них на столе лежит толстенная книга (и не одна) с сотнями тысяч параметров, подобранных методом тыка - справочник по сопромату.

JavaHarlal
()
Ответ на: комментарий от anonymous

> Кто-нибудь может, например, доказать закон сохранения энергии ?

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

anonymous
()
Ответ на: комментарий от anonymous

Так пофигу, доказать то все равно невозможно. Просто меняешь один догмат на другой. Смысл ?

anonymous
()
Ответ на: комментарий от anonymous

Почему догмат, дурачок? Это - факт. Экспериментальный. А только экспериментальным фактам и строгим выводам из них и можно верить. Кури методологию науки!

anonymous
()
Ответ на: комментарий от anonymous

Сам кури методологию. Факт - элемент эмпирического уровня научного познания, закон (ака догмат) - элемент теоретического уровня, построенный на основе обобщения научных фактов. Именно это _обобщение_ придает ему статус пусть каким-то боком обоснованного но все равно догмата. Строгий вывод из конечного числа фактов != истинный (правильный) вывод

anonymous
()

Вообще, конечно по идее, можно выразить зависимость времени исполнения, от указаных выше констант, а потом исследовать ее на экстремумы. Но это может оказаться слишком сложной задачей. Если для каждой сотни строчек проводить полный расчет, то с катушек слететь можно.

nsav-ng
()
Ответ на: комментарий от nsav-ng

Так скорее всего и делалось. Изначально было несколько методов поиска, которые были надцать раз опробываны на строках разной длины. Была выведена эмперическая закономерность, на основе которой и были выбраны конкретные методы поиска и оговорены области их применения. Можно даже повторить эксперимент ради смеха

GameMagister
()
Ответ на: комментарий от anonymous

> Так пофигу, доказать то все равно невозможно. Просто меняешь один догмат на другой. Смысл ?

Ровно такой же как замена пятого постулата Евклида, на противоположный, а точнее расширенный его вариант, дающий нам неевклидову геометрию. И это теперь не догмат, как ты выразился, а прямая привязка к экспериментальным фактам. Связь с однородностью времени устанавливает границы применимости для закона сохранения энергии, проверяемые в эксперименте.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.