2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Естественное упорядочение двоичных наборов
Сообщение24.06.2009, 21:23 
Заслуженный участник


18/03/07
1068
Собственно, как бы вы нарисовали табличку для дизъюнкции?

Так: \begin{tabular}{|c|c|c|}
\hline $a$ & $b$ & $a\lor b$ \\ \hline
1 & 1 & 1 \\ 
1 & 0 & 1 \\
0 & 1 & 1 \\
0 & 0 & 0 \\ \hline
\end{tabular} или так: \begin{tabular}{|c|c|c|}
\hline $a$ & $b$ & $a\lor b$ \\ \hline
0 & 0 & 0 \\ 
0 & 1 & 1 \\
1 & 0 & 1 \\
1 & 1 & 1 \\ \hline
\end{tabular} ?

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение24.06.2009, 21:54 
Заслуженный участник


11/05/08
32166
Ответ содержится в заголовке темы.

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение24.06.2009, 22:36 
Заслуженный участник


18/03/07
1068
Хорошо, чем тогда оно лучше противоестественного :) ?

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение24.06.2009, 22:46 
Заслуженный участник


11/05/08
32166
тем, что естественнее (это уж какая-то сексопатология пошла)

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение24.06.2009, 23:00 
Заслуженный участник


18/03/07
1068
Вот и поговорили :).

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 09:38 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Я бы нарисовал вторым способом.

А как студенты иногда рисуют --- это вообще жуть!

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 14:38 
Заслуженный участник


11/03/08
531
Петропавловск, Казахстан
Я тоже за второй способ. Когда они решают задачи на составление таблиц истинности, - нужен порядок. А считать, начиная с меньшего, естественнее. И не пропустят строчку и проверять легче.
Хотя, только никому не говорите, я проверяю выборочно :oops: Две-три строки проверю и терпение кончается...

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 16:20 
Заслуженный участник


18/03/07
1068
А вот разные гуманитарии почему-то рисуют так:

\begin{tabular}{|c|c|c|} \hline $a$ & $b$ & $a\lor b$ \\ \hline и & и & и \\  и & л & и \\ л & и & и \\ л & л & л \\ \hline \end{tabular}

Интересно, конечно, почему.

~~~~

А давайте сравним два цикла:
Код:
for (i=0; i<2^n; i++) {
// что-то делается с двоичным представлением i,
// дополненным слева нулями по необходимости
}
Код:
for (i=2^n-1; i>=0; i--) {
// что-то делается с двоичным представлением i,
// дополненным слева нулями по необходимости
}

Какой будет быстрее крутиться?

EtCetera в сообщении #224782 писал(а):
Разумеется, первый. Во втором (пока) происходит зацикливание.
Поправил :).

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 16:34 
Заслуженный участник


28/04/09
1933
Разумеется, первый. Во втором (пока) происходит зацикливание. :)

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 17:34 
Заслуженный участник
Аватара пользователя


03/06/09
1497
luitzen в сообщении #224776 писал(а):
Какой будет быстрее крутиться?

Вообще, все что можно вычислить на этапе инициализации цикла, там и надо вычислять, поэтому 2-ой код лучше. Но:
1. Современные оптимизаторы умные и сами догадаются вычислять 2^n на этапе инициализации цикла, а не при каждой проверке условия выхода.
2. Для XOR на большинстве процессоров имеются специальные инструкции, к тому же операция очень примитивная и вычисляется это мгновенно. Так что в реалиях вы разницы не заметите.

P. S. Не представляю, где может использоваться такой код. И у меня есть небольшие подозрения, что "^" у вас -- операция возведения в степень, которой в C(++) нет.

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 17:52 
Заслуженный участник
Аватара пользователя


22/11/06
1096
Одесса, ОНУ ИМЭМ
luitzen в сообщении #224776 писал(а):
Какой будет быстрее крутиться?

Если мне не изменяет память, сравнение с 0 происходит быстрее, чем сравнение с любым другим числом. Поэтому второй.

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 18:00 
Заслуженный участник


28/04/09
1933
meduza
meduza в сообщении #224791 писал(а):
И у меня есть небольшие подозрения, что "^" у вас -- операция возведения в степень, которой в C(++) нет.

Если на секундочку закатить глаза и представить себе, что n - объект класса какого-нибудь вещественного числа (в котором вдобавок есть конструктор по умолчанию на основе обычного числа), а ^ - перегруженный оператор возведения в степень, то - есть.

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 18:13 
Заслуженный участник
Аватара пользователя


03/06/09
1497
EtCetera в сообщении #224799 писал(а):
а ^ - перегруженный оператор возведения в степень, то - есть.

В С++ нельзя перегружать "^". Но я "закачу глаза" и представлю, что можно :roll:

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 18:18 
Заслуженный участник
Аватара пользователя


22/11/06
1096
Одесса, ОНУ ИМЭМ
meduza в сообщении #224791 писал(а):
И у меня есть небольшие подозрения, что "^" у вас -- операция возведения в степень, которой в C(++) нет.

Вообще-то никто не говорил, что это Си...

 Профиль  
                  
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 19:00 
Заслуженный участник


28/04/09
1933
meduza
meduza в сообщении #224800 писал(а):
В С++ нельзя перегружать "^". Но я "закачу глаза" и представлю, что можно :roll:

Как так нельзя? Не поверив своим глазам и чтя эксперимент как мерило истины, я набрал вот такую программку (прошу простить меня за немного необычный стиль):
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

class Real
{
public:

   Real
      (
         const double& _real = 0
      )
      :
         real(_real)
   {

   }

   friend
      Real operator ^
      (
         const Real& _r1,
         const Real& _r2
      )
   {
      return pow(_r1.real, _r2.real);
   }

   friend
      bool operator <
      (
         const Real& _r1,
         const Real& _r2
      )
   {
      return _r1.real < _r2.real;
   }

protected:
   
   double real;
};

void main(void)
{
   Real n = 3;
   int i;

   for (i = 0; i < (2^n); i++)
   {
      //...
   }

   getch();
}

...которая успешно откомпилировалась (и запустилась не менее успешно). Так что насчет "нельзя" это вопрос спорный... По крайней мере в наших широтах - можно.
Закатывать же глаза я предлагал именно на необходимость скобочек (2^n) в данном примере (без них вся затея с треском разваливается).
Бодигрим
Бодигрим в сообщении #224802 писал(а):
Вообще-то никто не говорил, что это Си...

Действительно, очень напоминает Action Script. :D

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Модераторы: Модераторы, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group