2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 Естественное упорядочение двоичных наборов
Сообщение24.06.2009, 21:23 
Собственно, как бы вы нарисовали табличку для дизъюнкции?

Так: \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 
Ответ содержится в заголовке темы.

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение24.06.2009, 22:36 
Хорошо, чем тогда оно лучше противоестественного :) ?

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение24.06.2009, 22:46 
тем, что естественнее (это уж какая-то сексопатология пошла)

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение24.06.2009, 23:00 
Вот и поговорили :).

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

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

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 14:38 
Я тоже за второй способ. Когда они решают задачи на составление таблиц истинности, - нужен порядок. А считать, начиная с меньшего, естественнее. И не пропустят строчку и проверять легче.
Хотя, только никому не говорите, я проверяю выборочно :oops: Две-три строки проверю и терпение кончается...

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 16:20 
А вот разные гуманитарии почему-то рисуют так:

\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 
Разумеется, первый. Во втором (пока) происходит зацикливание. :)

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 17:34 
Аватара пользователя
luitzen в сообщении #224776 писал(а):
Какой будет быстрее крутиться?

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

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

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 17:52 
Аватара пользователя
luitzen в сообщении #224776 писал(а):
Какой будет быстрее крутиться?

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

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 18:00 
meduza
meduza в сообщении #224791 писал(а):
И у меня есть небольшие подозрения, что "^" у вас -- операция возведения в степень, которой в C(++) нет.

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

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 18:13 
Аватара пользователя
EtCetera в сообщении #224799 писал(а):
а ^ - перегруженный оператор возведения в степень, то - есть.

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

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 18:18 
Аватара пользователя
meduza в сообщении #224791 писал(а):
И у меня есть небольшие подозрения, что "^" у вас -- операция возведения в степень, которой в C(++) нет.

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

 
 
 
 Re: Естественное упорядочение двоичных наборов
Сообщение25.06.2009, 19:00 
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