powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помощь с рекурсией и мемоизацией
7 сообщений из 32, страница 2 из 2
Помощь с рекурсией и мемоизацией
    #39715248
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
            1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19    20
-------------------------------------------------------------------------------------------------------------------------------
n =  1      0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
n =  2      1     1    -1    -3    -1     5     7    -3   -17   -11    23    45    -1   -91   -89    93   271    85  -457  -627
n =  3      1     2     0    -1     5     7    -6    -5    28    20   -51    -7   155    16  -315   118   796  -385 -1623  1535
n =  4      1     2     3     2    -2    -5    -7   -11    -4    17    20    18    45     1  -115   -54    -1  -242    58   755
n =  5      1     2     3     4     0    -2     8    11     9    19    -8   -23    69    60   -20   119   -52  -245   596   354
n =  6      1     2     3     4     5     3    -3    -7   -10   -16   -20   -23    -8    34    41    37    94   105    82     7
n =  7      1     2     3     4     5     6     0    -3    11    15    12    26    30    27   -15   -36   118   115   -32   209
n =  8      1     2     3     4     5     6     7     4    -4    -9   -13   -21   -26   -30   -38   -43   -11    58    66    65
n =  9      1     2     3     4     5     6     7     8     0    -4    14    19    15    33    38    34    52    57   -37   -60
n = 10      1     2     3     4     5     6     7     8     9     5    -5   -11   -16   -26   -32   -37   -47   -53   -58   -68
n = 11      1     2     3     4     5     6     7     8     9    10     0    -5    17    23    18    40    46    41    63    69
n = 12      1     2     3     4     5     6     7     8     9    10    11     6    -6   -13   -19   -31   -38   -44   -56   -63
n = 13      1     2     3     4     5     6     7     8     9    10    11    12     0    -6    20    27    21    47    54    48
n = 14      1     2     3     4     5     6     7     8     9    10    11    12    13     7    -7   -15   -22   -36   -44   -51
n = 15      1     2     3     4     5     6     7     8     9    10    11    12    13    14     0    -7    23    31    24    54
n = 16      1     2     3     4     5     6     7     8     9    10    11    12    13    14    15     8    -8   -17   -25   -41
n = 17      1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16     0    -8    26    35
n = 18      1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17     9    -9   -19
n = 19      1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18     0    -9
n = 20      1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19    10
...
Рейтинг: 0 / 0
Помощь с рекурсией и мемоизацией
    #39715259
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и чем это отличается от этого:
полудуходнако нам тут тоже предложить особо нечего, кроме констант на 1000 значений, например
...
Рейтинг: 0 / 0
Помощь с рекурсией и мемоизацией
    #39716330
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выбрал время, нарисовал мемоизацию для F на VBA с кольцевым буфером.
можно вставить в Excel и поиграть с функцией.

модуль с функцией:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Option Explicit
Option Base 0
Option Compare Binary

Rem модуль bas_memo2


 Rem получение построенного заполненного первоначальными данными буфера
 Private Function get_c_buffer(ByVal n As Long) As cls_cyrcle_vbuffer
  Dim o_buffer As cls_cyrcle_vbuffer
  Set o_buffer = New cls_cyrcle_vbuffer
  o_buffer.Init n
  Set get_c_buffer = o_buffer
 End Function

Function F(ByVal n As Long, ByVal k As Long) As Variant
  Rem требуется n> 0, k >= 0
  
  Dim cn_Zero As Variant
  Dim cn_One As Variant
  cn_Zero = CDec(0)
  cn_One = CDec(1)
  
  If n = 1 Then
    F = cn_Zero
    Exit Function
  End If
  If k < n Then
    F = k
    Exit Function
  End If
  
  Rem получаем буфер
  Dim o_buffer As cls_cyrcle_vbuffer
  Set o_buffer = get_c_buffer(n)
  '-------------------------
  Dim n_sign As Variant, x_value As Variant
  Dim i As Long, j As Long
  
  Rem считаем k-n+1 значений последовательности
  For i = 1 To k - n + 1
    x_value = cn_Zero
    n_sign = cn_One
    Rem цикл расчета одного значения
    For j = 1 To n
      x_value = x_value + (n_sign * j * o_buffer.read_Next_Backward)
      n_sign = -n_sign
    Next j
    Rem помещаем свежерасчитанное значение в буфер
    o_buffer.insert_next x_value
    o_buffer.Rewind_To_Insert_Pos
  Next i

  F = o_buffer.Last_Inserted
    
End Function




класс, обеспечивающий буферизацию
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
Option Explicit
Option Base 0
Option Compare Binary
Rem класс cls_cycle_vbuffer , работает как кольцевой буфер
'----------------------------------
Const ci_Low_end As Long = 0

Rem флаг завершения построения буфера с первоначальным заполнением
Private pb_inited As Boolean

Rem размер буфера
Private p_Size As Long

Rem точка вставки в буфер
Private pi_insert_pos As Long

Rem точка начала обратного чтения
Private pi_backward_read_pos As Long

Rem массив для буфера
Private a_buffer() As Variant

Property Get Size() As Long
  Size = p_Size
End Property

Rem вставка в следующий элемент буфера
Sub insert_next(pn_nextval As Variant)
  Rem смещение позиции вставки
  Dim pos As Long
  pos = pi_insert_pos
  pos = pos + 1
  If (pos >= Size) Then
    pos = ci_Low_end
  End If
  pi_insert_pos = pos
  
  Rem установка значения
  a_buffer(pi_insert_pos) = pn_nextval
 
End Sub

Rem переустановка позиции чтения в последнюю вставленную запись
Sub Rewind_To_Insert_Pos()
 pi_backward_read_pos = pi_insert_pos
End Sub

Rem инициализация буфера размера n и заполнение числами от о до n-1
Sub Init(ByVal n As Long)
  
  ReDim a_buffer(0 To n - 1) As Variant
    
  p_Size = n
  Dim iPos As Long
  For iPos = 0 To n - 1
    insert_next CDec(iPos)
  Next iPos
  Rewind_To_Insert_Pos
  
  pb_inited = True
End Sub

Rem итерируем назад
Property Get read_Next_Backward() As Variant
  Dim iPos As Long
  Dim x_val As Variant
  Rem сначала читаем
  iPos = pi_backward_read_pos
  x_val = a_buffer(iPos)
    
  Rem затем смещаем позицию
  iPos = iPos - 1
  If iPos < ci_Low_end Then
    iPos = Size - 1
  End If
  pi_backward_read_pos = iPos
  read_Next_Backward = x_val
End Property

Rem плучение последнего вставленного значения
Property Get Last_Inserted() As Variant
  Last_Inserted = a_buffer(pi_insert_pos)
End Property

Private Sub Class_Terminate()
  If pb_inited Then
    Erase a_buffer
  End If
End Sub

...
Рейтинг: 0 / 0
Помощь с рекурсией и мемоизацией
    #39716950
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby, как VBS запускают на Linux?
...
Рейтинг: 0 / 0
Помощь с рекурсией и мемоизацией
    #39716956
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonbooby, как VBS запускают на Linux?
не знаю.
Может быть, достаточно поставить wine.
Может быть, потребуется что-то добавить.
Никогда не имел и этим дело.

Для vbs код придется, в любом случае, подредактировать - убрать типы Long как минимум.

Код писался под vba-хост, например - Excel, или любой другой.

Может здесь что умное найдется.
https://stackoverflow.com/questions/20335878/is-it-possible-to-run-a-vbscript-in-unix-environment
https://gist.github.com/Ravenstine/9ccbe8269e8d5d28305b
или где-то рядом.
...
Рейтинг: 0 / 0
Помощь с рекурсией и мемоизацией
    #39716957
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby, сорян. Не буду ставить Wine просто чтоб скриптики запускать.
...
Рейтинг: 0 / 0
Помощь с рекурсией и мемоизацией
    #39716959
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonbooby, сорян....
не вопрос, не за что.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помощь с рекурсией и мемоизацией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]