Re[8]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:08
Оценка:
Здравствуйте, FR, Вы писали:

FR>Sum(list) не содержит в отличии от кода на Хаскеле выше алгоритма.


Для такого простого случая это не суть важно. Вряд ли бы кто описывал алгоритм, где надо просто найти сумму. В более сложном случае и счетчик цикла может перепрыгивать, и выход из цикла может произойти досрочно, и сам массив/список может быть надо будет изменить на лету...
Re[9]: Expression Tree для описания алгоритмов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.05.10 13:10
Оценка: +1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Ладно, какова алгоритмическая сложность алгоритма на Хаскеле? Если это тот же самый алгоритм, его сложность в среднем N log N, так?

Да.

ТЗИ>(Про потребление памяти скромно умолчим).

Можно и не умалчивать: в Haskell алгоритм работает не in-place, поэтому используется дополнительная память.
Re[8]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:12
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Это заявление в духе "миллионы леммингов не могут ошибаться" ? Практика показала что могут.


Ну... вот, например, при программировании шахмат возникает достаточно много различных алгоритмических задач, которые надо реализовать оптимальным образом. При этом в списке самых сильнейших шахматных движков и близко нет написанных на функциональных языках программирования. Не потому ли, что они для этого мало приспособлены???
Re[7]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:16
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, gandjustas, Вы писали:


G>>Выделенное — это твои трудности. По факту алгоритм на хаскеле или другом ФЯ оказывается гораздо читаемее.


M>Зачастую алгоритмы описывают байты и операции с ними, а также включают различные вопросы производительности, что не всегда так уж однозначно переводится на ФЯ.

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

M>Например, если взять alpha-beta поиск, то там в C-варианте будут функции DoMove, и UndoMove. Соответственно, для того, чтобы функциональный язык генерировал оптимальный код, необходимо чтобы он был в курсе сакрального равенства Position = UndoMove(DoMove(Position, Move), Move).

Тут как раз ленивость рулит, которая в хаскеле есть. Можно генерировать деревья всех вариантов, а потом отсекать неподходящие, не генерируя полное дерево. Причем из-за неизменяемости одинаковые поддеревья будут присутствовать в одном экземпляре и вычисляться не более одного раза.
Re[9]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:19
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, gandjustas, Вы писали:


G>>Это заявление в духе "миллионы леммингов не могут ошибаться" ? Практика показала что могут.


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

1)Пока нет
2)Для шахматных алгоритмов разработаны быстрые реализации при помощи битовых операций, которые хорошо делаются на низкоуровневых языках
3)Про скорость мы тут не говорили, мы обсуждаем понятность записи алгоритмов на различных языках
Re[10]: Expression Tree для описания алгоритмов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.05.10 13:22
Оценка:
Здравствуйте, gandjustas, Вы писали:

ТЗИ>>И вообще, хватит отождествлять математику и функциональное программирование. А императивное программирование — это что ли не математика?

G>Императивное программирование опирается на изменяемое состояние, которое не имеет никакого отношения к математике.

Как ни странно, но первое доказательство арифметичности вычислимых функций (то есть, утверждения о том, что для любой вычислимой функции f формула y = f(x) может быть выражена как утверждение на языке арифметики Пеано со свободными переменными x и y) было построено с использованием в качестве модели вычислений универсальных регистровых машин (то есть машин с изменяемым состоянием). А арифметичность функций, вычислимых, например, в лямбда-исчислении, следует уже из эквивалентности различных моделей вычислений (то есть возможности написать интерпретатор лямбда-исчисления на регистровых машинах). Так что я бы поостерегся говорить, что изменяемое состояние не имеет никакого отношения к математике.
Re[8]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:29
Оценка:
Здравствуйте, gandjustas, Вы писали:

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

G>Потому что для последовательности шагов еще надо доказать что она приводит к этому результату.

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

G>Тут как раз ленивость рулит, которая в хаскеле есть. Можно генерировать деревья всех вариантов, а потом отсекать неподходящие, не генерируя полное дерево. Причем из-за неизменяемости одинаковые поддеревья будут присутствовать в одном экземпляре и вычисляться не более одного раза.


Рулит, да не совсем. Во-первых, к одной и той же позиции можно прийти с перестановками ходов. В этом случае в шахматных движках обычно используют Z-Orbice ключи, которые позволяю быстро определять, а была ли такая позиция. Во-вторых, при переборе на менее-более значительную глубину, количество узлов превышает оперативную память. Соответственно, позиции из боковых вариантов удаляются из хэша.
Re[11]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:31
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, gandjustas, Вы писали:


ТЗИ>>>И вообще, хватит отождествлять математику и функциональное программирование. А императивное программирование — это что ли не математика?

G>>Императивное программирование опирается на изменяемое состояние, которое не имеет никакого отношения к математике.

N>Как ни странно, но первое доказательство арифметичности вычислимых функций (то есть, утверждения о том, что для любой вычислимой функции f формула y = f(x) может быть выражена как утверждение на языке арифметики Пеано со свободными переменными x и y) было построено с использованием в качестве модели вычислений универсальных регистровых машин (то есть машин с изменяемым состоянием). А арифметичность функций, вычислимых, например, в лямбда-исчислении, следует уже из эквивалентности различных моделей вычислений (то есть возможности написать интерпретатор лямбда-исчисления на регистровых машинах). Так что я бы поостерегся говорить, что изменяемое состояние не имеет никакого отношения к математике.


Ну еще можно машину тьюринга вспомнить.

Тем не менее большинство методов доказательств не работают с изменяемым состоянием.
Re[10]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:32
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>2)Для шахматных алгоритмов разработаны быстрые реализации при помощи битовых операций, которые хорошо делаются на низкоуровневых языках


А в чем проблема эти битовые операции перенести на функциональные языки???
Re[11]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:33
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, gandjustas, Вы писали:


G>>2)Для шахматных алгоритмов разработаны быстрые реализации при помощи битовых операций, которые хорошо делаются на низкоуровневых языках


M>А в чем проблема эти битовые операции перенести на функциональные языки???

спросите у создателей языков.
Наверное в том что они мало востребованы.
Re[8]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 13:42
Оценка:
Похоже, у нас разное представление об алгоритме быстрой сортировки.
Re[9]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:42
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, gandjustas, Вы писали:


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

G>>Потому что для последовательности шагов еще надо доказать что она приводит к этому результату.

M>Тогда неплохо было бы определиться с понятием, что такое алгоритм И какие алгоритмы требуется формально записывать. Сне почему-то кажется, что изначально автор интересовался именно "конечной последовательностью шагов".


Мне больше всех нравится определение Маркова:

Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату

Re[9]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 13:45
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Похоже, у нас разное представление об алгоритме быстрой сортировки.


Ага, у меня — об алгоритме, а у тебя — о реализации.
Re[10]: Expression Tree для описания алгоритмов
От: Тролль зеленый и толстый  
Дата: 17.05.10 13:46
Оценка: :)
Да другой это алгоритм. Для начала быстрая сортировка — это сортировка обменами. И разделение множеств там по-другому происходит, а не тупой "фильтрацией". И вопрос выбора среднего элемента там как-то опущен.

Если вам Хаскель понятнее, пишите своим женам письма на Хаскеле. И переписываться на RSDN'е можете тоже на Хаскеле.
Re[9]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 13:53
Оценка: -1
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Если человек изучал математику и не изучал программирование, ему оба варианта будут непонятны. А вот нормальное описание на естественном языке он с легкостью воспримет.


Не всегда, вот то описание которое ты дал вряд-ли, там без знания основ программирования ничего ни понятно.

ТЗИ>И вообще, хватит отождествлять математику и функциональное программирование. А императивное программирование — это что ли не математика?


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

ТЗИ>Математика — это вообще всего лишь набор формальных соотношений. То, как в математике принято записывать формулы — всего лишь традиция.


Ну не скажи, математика все-таки стремится к максимальной простоте и понятности.

ТЗИ>То, что функциональное программирование похоже на запись формул в математике, не делает его ближе к математике, чем императивное или какое-либо другое программирование.


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


ТЗИ>А ты делаешь ложное противопоставление, не понимая, что функциональное и императивное программирование — всего лишь две эквивалентные формы записи формальных соотношений.


В том дело что с практической точки зрения далеко не эквивалентные.
Re[9]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 13:54
Оценка:
Здравствуйте, Mystic, Вы писали:


M>Для такого простого случая это не суть важно. Вряд ли бы кто описывал алгоритм, где надо просто найти сумму. В более сложном случае и счетчик цикла может перепрыгивать, и выход из цикла может произойти досрочно, и сам массив/список может быть надо будет изменить на лету...


В более сложных случаях тоже проще и декларативнее получается.
Re[2]: Expression Tree для описания алгоритмов
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.10 13:57
Оценка: :)
Здравствуйте, FR, Вы писали:

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

FR>которые нужно реализовать на C++ сначала делаю на питоне (сейчас больше на окамле) это дает существенный выигрыш во времени
FR>разработки.

Остается только вопрос зачем с ОКамла на С++ что-то переписывать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Expression Tree для описания алгоритмов
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 17.05.10 13:59
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>

G>Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату


Для анализа алгоритма еще важны соображения эффективности. Т. е. любой алгоритм должен иметь вычислительную сложность, которую мы должны уметь вычислить.
Re[11]: Expression Tree для описания алгоритмов
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.05.10 14:03
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>Да другой это алгоритм. Для начала быстрая сортировка — это сортировка обменами. И разделение множеств там по-другому происходит, а не тупой "фильтрацией". И вопрос выбора среднего элемента там как-то опущен.

Переключаем википедию на английский и смотрим:
http://en.wikipedia.org/wiki/Quicksort#Algorithm
 function quicksort(array)
     var list less, greater
     if length(array) ≤ 1  
         return array  
     select and remove a pivot value pivot from array
     for each x in array
         if x ≤ pivot then append x to less
         else append x to greater
     return concatenate(quicksort(less), pivot, quicksort(greater))

Почти тоже что на хаскеле, но отдельно делается filter для каждой половины, хотя это можно заоптимизировать.

ТЗИ>Если вам Хаскель понятнее, пишите своим женам письма на Хаскеле. И переписываться на RSDN'е можете тоже на Хаскеле.

Слив засчитан.
Хотя если вы с женой общаетесь на C\C++ я хочу на это посмотреть
Re[11]: Expression Tree для описания алгоритмов
От: FR  
Дата: 17.05.10 14:05
Оценка:
Здравствуйте, Mystic, Вы писали:

M>А в чем проблема эти битовые операции перенести на функциональные языки???


Такой проблемы нет http://caml.inria.fr/pub/docs/old-311/libref/Pervasives.html#7_Bitwiseoperations
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.