2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5  След.
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение14.11.2019, 21:38 
Аватара пользователя


12/10/16
637
Almaty, Kazakhstan
wrest в сообщении #1426017 писал(а):
Вы зря на Dmitriy40 нападаете,

отнюдь, я отбиваюсь ) . Извращение, непонятная нумерология, кривая запись, идиотская - это не мои слова, на минуточку.
Ну он разобрался, по сути ничего сложного.
wrest в сообщении #1426017 писал(а):
А кстати: сколько вы хотите вычислить значений центральной колонны, и как будете определять есть ли периодичность там?

В первом посте я писал, что уже в тупике, и делюсь с другими этим методом декомпозиций. Может кому повезёт больше.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение14.11.2019, 22:02 
Заслуженный участник


20/08/14
11177
Россия, Москва
Мда, а со скоростью вычислений не так всё плохо как я думал. Если хранить не битовые строки, а именно что многобитные числа, то ускорение будет ровно в $k^2$ раз, где $k$ - по сколько бит в числе хранить. Сейчас сделал на PARI с восьмеричными цифрами (0..7), но без всякого перекрытия разумеется, просто побил исходную битовую строку на непересекающиеся группы по 3 бита и создал таблицу зависимости уже в базисе этих цифр (вычисляется на лету, думать лень), ускорение получилось с 4.7с для битовой строки в 3001 ячеек до 0.53с для 1001 восьмеричной цифры и с 43.7с для 9001 бита до 4.8с для 3001 восьмеричной цифры, честные 9 раз, это время расчёта всех итераций.
А значит никто не мешает сделать на PARI вычисление сразу по 10 бит чисел, с таблицей всего 4096 ячеек (влезают в кэш L2 процессора) и ускорением в миллион раз. :shock: А то AVX, асм, размечтался. :-)

-- 14.11.2019, 22:55 --

Сделал, проверил, при увеличении количества бит $k$ в числах время расчёта на PARI всех первых N итераций падает почти линейно по $k$, с 53.4с для $k=1$ до 5.27с для $k=11$ (это для 5К первых итераций и 10К битов). Ускорения в миллион раз не получилось, эх ... разве только в расчёте на число/ячейку.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 04:01 
Аватара пользователя


12/10/16
637
Almaty, Kazakhstan
Dmitriy40 в сообщении #1426014 писал(а):
если её нет в числах $b_2$.

Вы имеете ввиду доказанный факт о том что две соседние клетки непериодичны относительно друг друга?

-- 15.11.2019, 07:32 --

Soul Friend в сообщении #1425880 писал(а):
Может кто поможет найти для этих последовательностей правильное название и код в PARI/GP.

Я имел ввиду, те кто зарегистрирован в OEIS сделает правки там под своим именем.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 05:07 
Аватара пользователя


12/10/16
637
Almaty, Kazakhstan
Soul Friend в сообщении #1426042 писал(а):
Dmitriy40 в сообщении #1426014

писал(а):
если её нет в числах $b_2$.
Вы имеете ввиду доказанный факт о том что две соседние клетки непериодичны относительно друг друга?

Вы имеете ввиду доказанный факт о том что два соседних столбца непериодичны относительно друг друга? (Или там говорится про любые два столбца?)
гуглить: Aperiodicity in one-dimensional cellular automata.
(время правки текста истекло, извиняюсь за дублирование)

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 11:51 
Аватара пользователя


12/10/16
637
Almaty, Kazakhstan
Можно последовать примеру Вольфрама и генерировать псевдослучайные числа этим способом.
Код:
{M=matrix(100,201);
M[1,101]=1;M[1,100]=1;M[1,97]=1;M[1,103]=1;
for(i=2,100, for(j=2, 200, if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==1, M[i,j]=0);
if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==0, M[i,j]=0);
if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==1, M[i,j]=0);
if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==0, M[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==1, M[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==0, M[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==1, M[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==0, M[i,j]=0) ));

N=matrix(100,201);
N[1,101]=1;
for(i=2,100, for(j=2, 200, if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==1, N[i,j]=7);
if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==0, N[i,j]=6);
if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==1, N[i,j]=5);
if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==0, N[i,j]=4);
if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==1, N[i,j]=3);
if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==0, N[i,j]=2);
if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==1, N[i,j]=1);
if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==0, N[i,j]=0) ));
L=matrix(100,201);
L[1,101]=1;
for(i=2,100, for(j=2, 200,
if(N[i-1,j-1]==0&&N[i-1,j]==0&&N[i-1,j+1]==0, L[i,j]=0);
if(N[i-1,j-1]==0&&N[i-1,j]==0&&N[i-1,j+1]==1, L[i,j]=1);
if(N[i-1,j-1]==0&&N[i-1,j]==1&&N[i-1,j+1]==2, L[i,j]=2);
if(N[i-1,j-1]==0&&N[i-1,j]==1&&N[i-1,j+1]==3, L[i,j]=3);
if(N[i-1,j-1]==1&&N[i-1,j]==2&&N[i-1,j+1]==4, L[i,j]=4);
if(N[i-1,j-1]==1&&N[i-1,j]==2&&N[i-1,j+1]==5, L[i,j]=5);
if(N[i-1,j-1]==1&&N[i-1,j]==3&&N[i-1,j+1]==6, L[i,j]=6);
if(N[i-1,j-1]==1&&N[i-1,j]==3&&N[i-1,j+1]==7, L[i,j]=7);
if(N[i-1,j-1]==2&&N[i-1,j]==4&&N[i-1,j+1]==0, L[i,j]=8);
if(N[i-1,j-1]==2&&N[i-1,j]==4&&N[i-1,j+1]==1, L[i,j]=9);
if(N[i-1,j-1]==2&&N[i-1,j]==5&&N[i-1,j+1]==2, L[i,j]=10);
if(N[i-1,j-1]==2&&N[i-1,j]==5&&N[i-1,j+1]==3, L[i,j]=11);
if(N[i-1,j-1]==3&&N[i-1,j]==6&&N[i-1,j+1]==4, L[i,j]=12);
if(N[i-1,j-1]==3&&N[i-1,j]==6&&N[i-1,j+1]==5, L[i,j]=13);
if(N[i-1,j-1]==3&&N[i-1,j]==7&&N[i-1,j+1]==6, L[i,j]=14);
if(N[i-1,j-1]==3&&N[i-1,j]==7&&N[i-1,j+1]==7, L[i,j]=15);
if(N[i-1,j-1]==4&&N[i-1,j]==0&&N[i-1,j+1]==0, L[i,j]=16);
if(N[i-1,j-1]==4&&N[i-1,j]==0&&N[i-1,j+1]==1, L[i,j]=17);
if(N[i-1,j-1]==4&&N[i-1,j]==1&&N[i-1,j+1]==2, L[i,j]=18);
if(N[i-1,j-1]==4&&N[i-1,j]==1&&N[i-1,j+1]==3, L[i,j]=19);
if(N[i-1,j-1]==5&&N[i-1,j]==2&&N[i-1,j+1]==4, L[i,j]=20);
if(N[i-1,j-1]==5&&N[i-1,j]==2&&N[i-1,j+1]==5, L[i,j]=21);
if(N[i-1,j-1]==5&&N[i-1,j]==3&&N[i-1,j+1]==6, L[i,j]=22);
if(N[i-1,j-1]==5&&N[i-1,j]==3&&N[i-1,j+1]==7, L[i,j]=23);
if(N[i-1,j-1]==6&&N[i-1,j]==4&&N[i-1,j+1]==0, L[i,j]=24);
if(N[i-1,j-1]==6&&N[i-1,j]==4&&N[i-1,j+1]==1, L[i,j]=25);
if(N[i-1,j-1]==6&&N[i-1,j]==5&&N[i-1,j+1]==2, L[i,j]=26);
if(N[i-1,j-1]==6&&N[i-1,j]==5&&N[i-1,j+1]==3, L[i,j]=27);
if(N[i-1,j-1]==7&&N[i-1,j]==6&&N[i-1,j+1]==4, L[i,j]=28);
if(N[i-1,j-1]==7&&N[i-1,j]==6&&N[i-1,j+1]==5, L[i,j]=29);
if(N[i-1,j-1]==7&&N[i-1,j]==7&&N[i-1,j+1]==6, L[i,j]=30);
if(N[i-1,j-1]==7&&N[i-1,j]==7&&N[i-1,j+1]==7, L[i,j]=31)));
for(i=1, 100, print1(L[i, 101], ", ") )
}

1, 0, 13, 25, 7, 12, 26, 2, 6, 28, 3, 6, 13, 25, 23, 4, 14, 8, 13,
25, 7, 28, 18, 30, 0, 1, 3, 22, 5, 13, 9, 15, 24, 5, 13, 9, 31, 16,
24, 5, 13, 9, 31, 0, 16, 9, 31, 0, 0, 1, 19, 30, 17, 27, 18, 30, 0,
1, 3, 6, 12, 27, 2, 23, 20, 23, 20, 22, 4, 15, 24, 4, 14, 24, 5, 13,
9, 15, 24, 20, 7, 12, 26, 2, 6, 12, 11, 10, 11, 10, 11, 26, 19, 14,
8, 13, 25, 7, 28, 2


только числа от нуля до 31, зато не периодичные.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 11:56 


05/09/16
11531
Soul Friend
Из того что я прочитал в блоге Вольфрама, я так понял что он за 40 лет пробовал и так и сяк и наперекосяк, и все равно последовательность в центральной колонке проявляет себя только как случайная.
В частности, он пробовал и архиваторами архивировать, и статистическими методами выявлять неслучайность (и писал статью в applied mathematics в 1986 году об этом), и нейронные сети натравливал, и какой-то там deep learning, и делал эту колонку генератором случайных чисел в вольфрам математике и никто не жаловался на неслучайность и т.д. и т.п.
Такшта вам с вашим пятибитным кодированием надо не только вычислить центральную колонку достаточно далеко, но и прикинуть как именно вы собираетесь искать закономерности в ней...

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 12:03 
Аватара пользователя


12/10/16
637
Almaty, Kazakhstan
wrest в сообщении #1426064 писал(а):
Такшта вам с вашим пятибитным кодированием надо не только вычислить центральную колонку достаточно далеко, но и прикинуть как именно вы собираетесь искать закономерности в ней...

А может я хочу доказать не периодичность? Такшта, это палка с двумя концами.
К слову, я ведь писал в самом первом посте:
Soul Friend в сообщении #1425851 писал(а):
Так и не смог доказать непериодичность этой последовательности, делюсь мыслями, может у кого-то получится продвинуть идею дальше.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 12:57 


05/09/16
11531
Soul Friend в сообщении #1426067 писал(а):
А может я хочу доказать не периодичность? Такшта, это палка с двумя концами.

Ну, в любом случае, смотреть на ваши бесконечные if-ы доставляет моральные страдания.
Например, значение N[i-1,j] вообще не влияет на L[i,j] никак.

С учетом этого, нижний монстр из if-ов сокращается до:
for(i=2,100, for(j=2, 200,L[i,j]=8*(N[i-1,j-1] \ 2) + N[i-1,j+1]))

-- 15.11.2019, 13:05 --

Soul Friend в сообщении #1426067 писал(а):
К слову, я ведь писал в самом первом посте:

А я вам отвечаю на другое:
Soul Friend в сообщении #1425880 писал(а):
Может кто поможет найти для этих последовательностей правильное название и код в PARI/GP.
То что вы с наскоку ничего не найдёте и так ясно, Вольфрам 40 лет по пустыне ходил искал и не нашёл. Озарение (в вашем мозгу) конечно не исключается, мало ли, но я тут пишу чисто по PARI/GP :mrgreen:

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 13:45 
Аватара пользователя


12/10/16
637
Almaty, Kazakhstan
wrest в сообщении #1426071 писал(а):
Ну, в любом случае, смотреть на ваши бесконечные if-ы доставляет моральные страдания.

Мне тоже, но на большее в PARI я пока не способен. Копипаст выручает.
wrest в сообщении #1426071 писал(а):
С учетом этого, нижний монстр из if-ов сокращается до:
for(i=2,100, for(j=2, 200,L[i,j]=8*(N[i-1,j-1] \ 2) + N[i-1,j+1]))

у меня выдает ошибку
Код:
incorrect type in &_[_,_] OCcompo2ptr [not a matrix] (t_POL).
Можете написать полный код, или сказать что нужно объявить и куда вставлять этот кусок кода?

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 14:11 


05/09/16
11531
Soul Friend в сообщении #1426077 писал(а):
Можете написать полный код,

код: [ скачать ] [ спрятать ]
Используется синтаксис C
  1. {M=matrix(100,201);
  2. M[1,101]=1;M[1,100]=1;M[1,97]=1;M[1,103]=1;
  3. for(i=2,100, for(j=2, 200, if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==1, M[i,j]=0);
  4. if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==0, M[i,j]=0);
  5. if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==1, M[i,j]=0);
  6. if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==0, M[i,j]=1);
  7. if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==1, M[i,j]=1);
  8. if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==0, M[i,j]=1);
  9. if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==1, M[i,j]=1);
  10. if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==0, M[i,j]=0) ));
  11.  
  12. N=matrix(100,201);
  13. N[1,101]=1;
  14. for(i=2,100, for(j=2, 200, if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==1, N[i,j]=7);
  15. if(M[i-1,j-1]==1&&M[i-1,j]==1&&M[i-1,j+1]==0, N[i,j]=6);
  16. if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==1, N[i,j]=5);
  17. if(M[i-1,j-1]==1&&M[i-1,j]==0&&M[i-1,j+1]==0, N[i,j]=4);
  18. if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==1, N[i,j]=3);
  19. if(M[i-1,j-1]==0&&M[i-1,j]==1&&M[i-1,j+1]==0, N[i,j]=2);
  20. if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==1, N[i,j]=1);
  21. if(M[i-1,j-1]==0&&M[i-1,j]==0&&M[i-1,j+1]==0, N[i,j]=0) ));
  22. L=matrix(100,201);
  23. L[1,101]=1;
  24. for(i=2,100, for(j=2, 200,L[i,j]=8*(N[i-1,j-1] \ 2) + N[i-1,j+1]));
  25. for(i=1, 100, print1(L[i, 101], ", ") )
  26. }

24-я строка.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 14:35 
Аватара пользователя


12/10/16
637
Almaty, Kazakhstan
wrest
чётко, :appl:
можно использовать на OEIS?

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 14:55 


05/09/16
11531
Soul Friend в сообщении #1426088 писал(а):
можно использовать на OEIS?

Это очень плохой код, я бы на OEIS не выкладывал.

1. Вы используете двумерные массивы там, где не надо, а это память.
2. Вы используете массив фиксированного размера, а значит ваша программа только вычислит 100 чисел и не больше, то есть не является универсальной.
3. Ваша программа печатает числа, а должна, вообще-то, возвращать.
4. Куча if-ов там не нужна, плюс, написано так, что проверяются все условия, даже если значение уже вычислено. А это время (из 8 проверок в обоих циклах в среднем надо делать по 4, так что замедление минимум в 4 раза).
5. Вы так и не объяснили что там вычисляется. В итоге привлекли к вычислению данные, как я написал выше, которые не влияют на результат. Число N[i-1,j] непосредственно "над" обрабатываемой ячейкой L[i,j] в вашем коде, на неё не влияет и отсюда вопрос: то ли вы на самом деле вычисляете, что хотите?

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 16:12 
Заслуженный участник


20/08/14
11177
Россия, Москва
Я повторю предложение заменить каждую кучу if-ов на выборку из массива. Ну или на прямые вычисления как wrest предложил. Это и ускорит, и понятнее.

wrest в сообщении #1426071 писал(а):
Например, значение N[i-1,j] вообще не влияет на L[i,j] никак.
Мне интересно, а как это поняли? Я из последней кучи if-ов этого не вижу, может надо смотреть вместе с предыдущей кучей?

UPD. Какой кошмар эти кучи if-ов! Вторая куча преобразует двоичную запись в десятичную, что можно сделать банально N[i,j]=M[i-1,j-1]*4+M[i-1,j]*2+M[i-1,j+1]; - вот и вся вторая куча if-ов!
А как первую сделать выборкой из rule[] я уже писал в своих программах выше.
UPD2. И кстати, если в результате нужен лишь центральный столбец матрицы L, то матрицы N и L вообще не нужны, столбец L можно вычислить прямо по 9 центральным элементам матрицы M.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 16:12 
Аватара пользователя


12/10/16
637
Almaty, Kazakhstan
Двумерные массивы использовал чтобы увидеть всю картину полностью, то есть напечатать матрицу и посмотреть как распределяются десятичные числа, матрица расширяемая, но да, с увеличением матрицы увеличивается и время вычисления. Один раз вычислив матрицу можно удобно манипулировать её значениями.
Как иначе создавать элементарные клеточные автоматы на PARI и иметь доступ к любым её значениям я не знаю.
Dmitriy40 в сообщении #1426114 писал(а):
Я повторю предложение заменить каждую кучу if-ов на выборку из массива.

Если бы я понимал о чём вы, яж не программист, а такк. Но я думаю над этим.

-- 15.11.2019, 19:35 --

Dmitriy40 в сообщении #1426114 писал(а):
Какой кошмар эти кучи if-ов! Вторая куча преобразует двоичную запись в десятичную, что можно сделать банально N[i,j]=M[i-1,j-1]*4+M[i-1,j]*2+M[i-1,j+1]; - вот и вся вторая куча if-ов!

Даа, математика в программировании это сила!
Ну напишите, пожалуйста, весь код с выборкой rule[] , чтобы уже поставить на этом всём жирную точку.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 16:44 


05/09/16
11531
Dmitriy40 в сообщении #1426114 писал(а):
Мне интересно, а как это поняли? Я из последней кучи if-ов этого не вижу, может надо смотреть вместе с предыдущей кучей?

Ну вот как раз там и видно. Посмотрите формулу что я сделал: "левую" ячейку сперва сдвигаем на один бит вправо (выкидывая младший бит) затем на три бита влево (это делает конструкция 8*(N[i-1,j-1] \ 2), можно и shift-ом типа shift(shift(N[i-1,j-1],-1),3) но вряд ли быстрее будет а тумана кажись больше) и прибавляем "правую" ячейку N[i-1,j+1]. Ну а "средняя" ячейка N[i-1,j] выходит что и не нужна.
Dmitriy40 в сообщении #1426114 писал(а):
Я из последней кучи if-ов этого не вижу, может надо смотреть вместе с предыдущей кучей?
Не, предыдущие не нужны, всё видно там.

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

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



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

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


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

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