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


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Andrew Ezhguroff                     2:5020/400     09 Oct 2002  14:05:23
 To : Pavel P
 Subject : Re: Как закодировать?
 -------------------------------------------------------------------------------- 
 
 Привет! "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))
 
 И тут же сам начинаешь меряться... :-) К тому же это твои слова из прошлого
 письма:
 
 =========Beginning of the citation==============
  Хотя многие до сих пор думают
 что на нем самая краткая запись :) Люди не пишите на С :) Пишите вот так :)
 =========The end of the citation================
 
 А где ты до этого у меня слова о длине программы видел? Hо если так желаешь,
 то, насколько я помню, на Forth эта программа будет в несколько раз короче
 твоего варианта. :-)
 
  PP> И как говорится STL-ные извращения меня не интересуют. :)
 
 STL-это часть стандарта C++ (в отличии от shr в Паскале).
 
  PP> Это раз Количество символов ты уже сравнил? И это при том что оба моих
  PP> варианта аккуратно разделены пробелами для лучшей читаемости.
 
 А зачем мне это? Я закодировал твой алгоритм один в один на стандартном C++
 и все...
 
  >> И на порядок медленнее (язык больше похож на интерпретируемый)? :-)
  PP> Hе получишь ты супер приз :) Hе медленее. Он компилируемый :)
 
 Basic тоже компиляторы имеет (помнится был такой на СМ-1800, :-) да и QB до
 сих пор используют).
 
 Заглянул сейчас на http://haskell.org - он имеет как компиляторы, так и
 интерпретаторы. И ИМХО, я не думаю, что это чисто компилируемый язык (скорее
 всего без элементов интерпретации обойтись невозможно).
 
  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;
 }
 
  >> Hо вот преимуществ я не вижу: дополнительная функция, лишняя рекурсия
  PP> Дополнительная функция только у тебя c STL. У меня f не экпортится
  PP> в глобальную область видимости и ты не можешь ее вызвать ни откуда
  PP> кроме как из toBin, а у тебя действительно лишняя глобальная
  PP> функция и побороть ты это в C++ не можешь.
 
 Если я поставлю "static", то функция перестанет быть глобальной. Hо от этого
 она не перестанет быть функцией. Так что независимо от области видимости,
 функций у тебя две.
 
  >> (проверка выполняется после рекурсивного вызова), серьезные накладные
  PP> Меньше чем в STL :) Hа порядок, ибо это не класс, а просто массив :)
 
 Судя по всему, динамический массив. Т.е. та же самая работа с кучей и прочие
 тормоза (включая, вероятно, и автаматическую сборку мусора?). Только в 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;
 }
 
  PP> С пока не смог отстоят позицию краткого и понятного языка :)
  PP> пригодного для _прозрачного описания алгоритмов_ :)
 
 А зачем ему это надо? Си - это очень удобный рабочий инструмент.
 
 Если понадобится предельная краткость записи, то я возьму APL, или Forth...
 Если прозрачность описания алгоритма - что-нибудь Алголо-подобное (в том
 числе и Паскаль). Hо если мне надо написать реальную программу, то в
 большинстве случаев это будет C/C++.
 
 С уважением, Андрей.
 -- 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.Mail.Ru (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/6488b9b60032.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional