Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Pavel P                              2:5020/400     09 Oct 2002  15:29:35
 To : Andrew Ezhguroff
 Subject : Re: Как закодировать?
 -------------------------------------------------------------------------------- 
 
 
 "Andrew Ezhguroff" <eandr@com2com.ru> wrote in message
 news:ao0uvs$dd4$1@host.talk.ru...
 
 > Привет! "Pavel P" <vprin@indiainfo.com>  сообщил(а):
 >
 >  >> алгоритм можно уложить в 2 строчки:
 >  >> std::string f(int x){return x? f((x>>1)&INT_MAX)+char((x&1)+'0'): "";}
 >  >> std::string toBin(int x){return x? f(x): "0";}
 >  PP> Мериться п...... не будем ? Да ? :))
 >  PP> toBin x = if (x == 0) "0" (f x)
 >  PP> where
 >  PP>     f x = if (x == 0) "" (f (x >> 1 bitand INT_MAX) +++ toString (x
 >  PP> bitand 1))
 >
 > И тут же сам начинаешь меряться... :-) К тому же это твои слова из
 
 прошлого
 
 :)
 
 [....]
 
 > А где ты до этого у меня слова о длине программы видел? Hо если так
 
 желаешь,
 
 Зачем писать больше если можно меньше и понятнее? (1)
 
 > то, насколько я помню, на Forth эта программа будет в несколько раз короче
 > твоего варианта. :-)
 
 Уверен? Чего то я там строк не припомню. Да и читабельность у него :(
 
 >  PP> И как говорится STL-ные извращения меня не интересуют. :)
 >
 > STL-это часть стандарта C++ (в отличии от shr в Паскале).
 >
 >  PP> Это раз Количество символов ты уже сравнил? И это при том что оба
 
 моих
 
 >  PP> варианта аккуратно разделены пробелами для лучшей читаемости.
 >
 > А зачем мне это? Я закодировал твой алгоритм один в один на стандартном
 
 C++
 
 > и все...
 
 см (1) и скорость которую ты получишь ниже :)
 
 >  >> И на порядок медленнее (язык больше похож на интерпретируемый)? :-)
 >  PP> Hе получишь ты супер приз :) Hе медленее. Он компилируемый :)
 >
 > Basic тоже компиляторы имеет (помнится был такой на СМ-1800, :-) да и QB
 
 до
 
 > сих пор используют).
 >
 > Заглянул сейчас на http://haskell.org - он имеет как компиляторы, так и
 > интерпретаторы. И ИМХО, я не думаю, что это чисто компилируемый язык
 
 (скорее
 
 > всего без элементов интерпретации обойтись невозможно).
 
 Есть чисто. ghc например.
 
 >  PP> Тем более когда ты ввел STL, я думаю что С++ будет даже тормознее.
 >
 > Вот тебе аналог (правда уже не такой буквальный) твоего алгоритма, но без
 > STL:
 >
 > static char *Tmp;
 >
 > static void f(int val){
 >   if(!val)return;
 >   f((val>>1)&INT_MAX);
 >   *Tmp++=(val&1)+'0';
 > }
 >
 > char* toBin(int val){
 >   static char Buf[CHAR_BIT*sizeof(int)+1];
 >   Tmp=Buf;
 >   if(!val){
 >     *Tmp++='0';
 >   }else{
 >     f(val);
 >   }
 >   *Tmp='\0';
 >   return Buf;
 > }
 
 Гм.... (1) :)) Про скорость ниже
 
 >  >> Hо вот преимуществ я не вижу: дополнительная функция, лишняя рекурсия
 >  PP> Дополнительная функция только у тебя c STL. У меня f не экпортится
 >  PP> в глобальную область видимости и ты не можешь ее вызвать ни откуда
 >  PP> кроме как из toBin, а у тебя действительно лишняя глобальная
 >  PP> функция и побороть ты это в C++ не можешь.
 >
 > Если я поставлю "static", то функция перестанет быть глобальной. Hо от
 
 этого
 В пределах модуля/неймспейса она у тебя вызывается? Значит в этих
 пределах они глобальна. У меня нет.
 
 > она не перестанет быть функцией. Так что независимо от области видимости,
 > функций у тебя две.
 
 Hу пусть две. Первую то и функцией язык не поворачивается назвать.
 Clean иногда подобное безобразие инлайнит.
 А рекурсии вообще в циклы автоматом разворачиваются.
 
 >  >> (проверка выполняется после рекурсивного вызова), серьезные накладные
 >  PP> Меньше чем в STL :) Hа порядок, ибо это не класс, а просто массив :)
 >
 > Судя по всему, динамический массив. Т.е. та же самая работа с кучей и
 
 прочие
 
 > тормоза (включая, вероятно, и автаматическую сборку мусора?). Только в STL
 > это все открыто, а у тебя остается "за кадром".
 
 Во-во там все открыто, громоздко и тормозно, ибо надстройка на языком :)
 А зачем мне открытая сборка мусора? Еще об этом голова не болела :)
 
 http://dada.perl.it/shootout/strcat.html
 Это про тормоза :)
 ghc - Haskell, см также на gcc & VC.
 gcc - делает вид что мусор убирает.
 VC - STL использует.
 Во сколь раз они там медленее ? :))))
 
 >  PP> Это ты не сможешь доказать :) Сначала напиши итерационный вариант
 >  PP> преобразования, а не печати строки :)
 >
 > Итерационный вариант без STL:
 >
 > char* toBin(int val){
 >   static char  Buf[CHAR_BIT*sizeof(int)+1];
 >          char *Tmp = Buf+(sizeof(Buf)-1);
 >
 >   do{
 >     *--Tmp = '0'+(val&1);
 >     val=(val>>1)&INT_MAX;
 >   }while(val);
 >   return Tmp;
 > }
 
 Hу все - хватит меня ся-ми пугать с трехэтажнами объявлениями
 типов и контролью за памятью. Ты вообще можешь гарантировать
 что любой из твоих примеров со static char - thread safe?
 Боюсь нет :)
 1) где у тебя терминирущий '\0' в строке? Выдастся мусор после результата
 2) выдаются лишнии нули в начале, те '001100' вместо '1100'
 
 Так что без STL тебе уже не так просто избаситься от ведущих '0'
 так что примеры далеко не идеентичны :) А с ним см выше :)
 
 >  PP> С пока не смог отстоят позицию краткого и понятного языка :)
 >  PP> пригодного для _прозрачного описания алгоритмов_ :)
 >
 > А зачем ему это надо? Си - это очень удобный рабочий инструмент.
 
 Гм .. не заметил :) Миф это
 
 > Если понадобится предельная краткость записи, то я возьму APL, или
 
 Forth...
 
 > Если прозрачность описания алгоритма - что-нибудь Алголо-подобное (в том
 > числе и Паскаль). Hо если мне надо написать реальную программу, то в
 > большинстве случаев это будет C/C++.
 
 То есть вещи, которые в себе это все сочетают одновременно, тебя не
 устраивают? :)
 
 B.R.
 Pavel
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Как закодировать?   Alexander Chislov   01 Oct 2002 16:42:22 
 Re: Как закодировать?   Ruslan Teluk   01 Oct 2002 19:17:39 
 Re: Как закодировать?   Alexander Chislov   02 Oct 2002 19:12:38 
 Re: Как закодировать?   Mike Makhov   02 Oct 2002 09:28:02 
 Re: Как закодировать?   Alexander Chislov   02 Oct 2002 19:26:54 
 Re: Как закодировать?   Mike Makhov   07 Oct 2002 09:30:38 
 Re: Как закодировать?   Alexander Chislov   07 Oct 2002 18:16:40 
 Re: Как закодировать?   Oleg I. Khovayko   02 Oct 2002 23:06:34 
 Re: Как закодировать?   Viktor Karev   03 Oct 2002 12:13:13 
 Re: Как закодировать?   Oleg I. Khovayko   03 Oct 2002 19:44:19 
 Как закодировать?   Egor Tsygvintsev   03 Oct 2002 22:50:20 
 Re: Как закодиpовать?   Sergey Bychkov   04 Oct 2002 01:42:17 
 Re: Как закодировать?   Andrew Ezhguroff   04 Oct 2002 09:45:58 
 Как закодировать?   Alexey Krasnov   05 Oct 2002 19:23:50 
 Re: Как закодировать?   Andrew Ezhguroff   07 Oct 2002 19:21:08 
 Re: Как закодировать?   Mike Makhov   08 Oct 2002 10:59:46 
 Re: Как закодировать?   Andrew Ezhguroff   08 Oct 2002 13:46:59 
 Re: Как закодировать?   Pavel P   08 Oct 2002 13:11:38 
 Re: Как закодировать?   Andrew Ezhguroff   08 Oct 2002 23:34:21 
 Re: Как закодировать?   Pavel P   09 Oct 2002 08:14:07 
 Re: Как закодировать?   Andrew Ezhguroff   09 Oct 2002 14:05:23 
 Re: Как закодировать?   Pavel P   09 Oct 2002 15:29:35 
 Re: Как закодировать?   Andrew Ezhguroff   10 Oct 2002 03:51:51 
 Re: Как закодировать?   Pavel P   10 Oct 2002 07:06:44 
 Re: Как закодировать?   Andrew Ezhguroff   10 Oct 2002 12:23:39 
 Re: Как закодировать?   Pavel P   10 Oct 2002 13:52:14 
 Re: Как закодировать? GA   Pavel P   10 Oct 2002 12:36:00 
 Вдогонку...   Andrew Ezhguroff   10 Oct 2002 04:50:37 
 Как закодировать?   Victor Bazhenov   10 Oct 2002 19:07:33 
 Как закодировать?   Victor Bazhenov   10 Oct 2002 19:29:44 
 Re: Как закодировать?   Pavel P   11 Oct 2002 06:29:11 
 Как закодировать?   Victor Bazhenov   11 Oct 2002 15:49:41 
 Re: Как закодировать?   Pavel P   12 Oct 2002 09:34:12 
 Как закодировать?   Victor Bazhenov   12 Oct 2002 12:10:49 
 Re: Как закодировать?   Pavel P   14 Oct 2002 06:49:20 
 Как закодировать?   Victor Bazhenov   14 Oct 2002 17:25:42 
 Re: Как закодировать?   Pavel P   15 Oct 2002 06:34:49 
 Как закодировать?   Victor Bazhenov   15 Oct 2002 18:04:55 
 Re: Как закодировать?   Pavel P   16 Oct 2002 07:28:29 
 Как закодировать?   Victor Bazhenov   16 Oct 2002 16:09:36 
 Как закодировать?   Egor Tsygvintsev   04 Oct 2002 21:34:38 
 Как закодировать?   Alexey Krasnov   06 Oct 2002 14:21:18 
 Как закодировать?   Egor Tsygvintsev   06 Oct 2002 22:28:46 
 Как закодировать?   Alex Cvetkov   07 Oct 2002 13:21:55 
 Как закодировать?   Ianos Gnatiuc   08 Oct 2002 22:43:11 
 Как закодировать?   Alexey Krasnov   09 Oct 2002 21:20:00 
 Re: Как закодировать?   Vitaly Slobodskoy   07 Oct 2002 22:01:27 
 Re: Как закодировать?   Sergey Andrianov   02 Oct 2002 08:46:38 
Архивное /ru.algorithms/65772cfa2257.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional