Научная статья на тему 'Поиск и замещение в гнездовых массивах'

Поиск и замещение в гнездовых массивах Текст научной статьи по специальности «Математика»

CC BY
131
16
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ИНФОРМАТИКА / ГНЕЗДОВЫЕ МАТРИЦЫ / ВЫЧИСЛИТЕЛЬНЫЕ ЗАДАЧИ / ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ / ИНФОРМАТИЗАЦИЯ ОБУЧЕНИЯ / INFORMATICS / NESTED MATRIXES / COMPUTING TASKS / INFORMATION TECHNOLOGIES / TRAINING INFORMATIZATION

Аннотация научной статьи по математике, автор научной работы — Григорьев С.Г., Есаян А.Р.

В данной статье приведены простые алгоритмы решения рекурсивных алгоритмов для простого и обобщенного поиска и замещения элементов в гнездовых матрицах. Изложены новые задачи, связанные с гнездовыми матрицами с числовыми или строковыми элементами. Для записи алгоритмов используется язык среды инженерных и научных вычислений PTC Mathcad Prime. В процессе их решения у студентов развивается логическое, алгоритмическое информационное мышление.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

SEARCH AND SUBSTITUTION IN NESTED ARRAYS

In this article simple algorithms of the solution of recursive algorithms for the simple and generalized search and replacement of elements are given in nested matrixes. The new tasks connected with nested matrixes with numerical or line elements are stated. For record of algorithms language of the environment of engineering and scientific calculations PTC Mathcad Prime is used. In the course of their decision at students the logical, algorithmic information thinking develops.

Текст научной работы на тему «Поиск и замещение в гнездовых массивах»

ПЕДАГОГИЧЕСКАЯ ИНФОРМАТИКА

ПОИСК И ЗАМЕЩЕНИЕ В ГНЕЗДОВЫХ МАССИВАХ

С.Г. Григорьев1, А.Р. Есаян2

1 Московский городской педагогический университет Шереметьевская ул., 29, Москва, Россия, 127521 2 Тульский государственный педагогический университет им. Л.Н. Толстого пр. Ленина, 125, Тула, Россия, 300026

В данной статье приведены простые алгоритмы решения рекурсивных алгоритмов для простого и обобщенного поиска и замещения элементов в гнездовых матрицах. Изложены новые задачи, связанные с гнездовыми матрицами с числовыми или строковыми элементами. Для записи алгоритмов используется язык среды инженерных и научных вычислений PTC MathcadPrime. В процессе их решения у студентов развивается логическое, алгоритмическое информационное мышление.

Ключевые слова: информатика, гнездовые матрицы, вычислительные задачи, информационные технологии, информатизация обучения

Ранее нами был предложен ряд рекурсивных алгоритмов для простого и обобщенного поиска и замещения элементов в гнездовых матрицах [1]. В данной статье приведены более простые алгоритмы решения этих же задач, а также рассмотрен ряд новых задач, связанных с гнездовыми матрицами с числовыми или строковыми элементами. Для записи алгоритмов используется язык среды инженерных и научных вычислений PTC Mathcad Prime.

Напомним, что гнездовые матрицы определяются рекурсивно как матрицы, элементами которых могут быть числа, строки и снова матрицы, причем во вложенных матрицах элементами снова могут быть числа, строки и матрицы. Вот примеры гнездовых матриц:

Поскольку матрицы являются двумерными или одномерными массивами, вместо слов «матрица», «простая матрица» и «гнездовая матрица» часто используются слова «массив», «простой массив» и «гнездовой массив». При выводе массивы могут представляться или в раскрытом виде, как это показано выше в правых частях присваиваний, или в свернутом виде. В последнем случае виден только верхний уровень вложенности из скалярных или строковых элементов и размеры массивов следующего уровня вложенности в формах [п х m\, где п — число строк и m — число столбцов. Если, например, вывести определенные выше значения переменных w1 и w2, а затем свернуть их, то получим:

Гнездовой массив удобно интерпретировать деревом, корнем которого является сам массив, а от него идут дуги к элементам — скалярам, строкам, простым и гнездовым массивам. От вложенных массивов снова идут дуги к их элементам — скалярам, строкам, простым и гнездовым массивам и т. д. Листьями подобного дерева являются скаляры или строки — конечные элементы, не имеющие последующих ссылок. Исходя из этого, для гнездовых массивов можно использовать многие термины, применяемые для деревьев, например, «листья», «уровни вложенности элементов», «высота». Высотой гнездового массива назовем высоту соответствующего ему дерева, т.е. максимальное из количеств дуг на путях от корня до листьев.

Поскольку гнездовые массивы определяются рекурсивно, то и наиболее простая и эффективная их обработка реализуется рекурсивными алгоритмами [2]. Как объекты хранения данных гнездовые массивы изучены слабо, а встроенных в среду PTC Mathcad Prime средств для работы с ними мало. Ряд рекурсивных функций для работы с гнездовыми массивами предложен в работах [3—6]. В [3; 5] речь идет о функциях общего назначения, а в [4; 6] — о функциях, позволяющих проводить «векторные» операции, то есть действия сразу над каждым из элементов массива.

Простой поиск и замещение. В этом разделе сформулированы задачи простого поиска и замещения элементов в гнездовых массивах (F, G, Hи I). В конце статьи в разделе I приведенного фрагмента mathcad-документа предложены рекурсивные функции для решения указанных задач.

Задачи F. Элементы и их позиции

F1. Создать функцию, которая по гнездовой матрице ma строит матрицу позиций всех элементов ma (кроме ma). Строки матрицы-результата должны иметь вид [elepos], где ele — элемент ma,pos — позиция элемента ele в ma.

F2. Сформировать функцию, обратную к функции, решающей задачу F1. То есть требуется написать функцию, которая результат вычислений по функции для F1 переводит в матрицу ma.

Задачи G. Выборки элементов из гнездовой матрицы по их позициям

G1. Построить функцию, возвращающую элемент гнездовой матрицы ma из позиции p. (p — простая матрица с двумя столбцами, в строках которой размещены позиции по уровням вложенности).

U>1 —

[1-3 7 1 17 6[lx2]j

w2-

f[1 х 2] 3 7 1

L 4 7 [1 X 2] j"

G2. Построить функцию, возвращающую вектор тех элементов гнездовой матрицы ma, которые расположены в позициях, указанных компонентами вектора vp.

В следующих задачах под объектом понимается все то, что может являться элементом гнездовой матрицы, то есть любое число, строка, простой или гнездовой массив из чисел и (или) строк.

Задачи H. Вхождение объекта в гнездовую матрицу

H1. Выяснить, сколько раз объект x входит как элемент в гнездовую матрицу ma. При наличии вхождений возвратить матрицу [x n], где n — количество вхождений, в противном случае — слово "нет".

H2. Выяснить, входит ли объект x как элемент в гнездовую матрицу ma. Если да, то возвратить вектор позиций вхождения, если нет — слово "нет".

Замечание. Если x = ma, то, вообще говоря, x не имеет позиции в ma. Будем считать, что в этом случае условно p = ["x" "y"].

Задачи I. Замещение объектов в гнездовой матрице

11. Заместить все вхождения объекта x в гнездовую матрицу ma (x Ф ma) объектами y.

12. Заместить элемент из позиции pos гнездовой матрицы ma объектом y.

13. Пусть vpos — вектор позиций в ma, vy — вектор объектов. Заместить элементы гнездовой матрицы ma в позициях vpos соответствующими компонентами vy. Если в vy есть лишние объекты, то они должны игнорироваться. Если в vy недостает объектов, то вместо них необходимо использовать последнюю компоненту vy.

Несколько слов относительно функций решения задачи F1. Рекурсивная функция elepos имеет два аргумента ma иp, где ma — гнездовая матрица иp — вспомогательный параметр в виде матрицы размером 1 * 2 для формирования позиций элементов при рекурсивных вызовах. Начальное значение для p роли не играет и его можно взять, например, в виде [0 0]. По elepos формируется матрица ot всех элементов ma и их позиций, включая и саму матрицу ma. Причем ma в ma позиции не имеет и включается в результат ot с любой псевдопозицией, например, ["x" "y"]. Однако по условиям задачи ma в ot вообще входить не должна. Поэтому и написана головная программа maelepos, по которой реализуется обращение к elepos и из сформированной матрицы ot удаляется начальная строка с ma. Аргумент maelepos принимает лишь исходную гнездовую матрицу ma. Краткие замечания по функциям, решающим другие задачи, даны на самом фрагменте mathcad-документа.

Обобщенный поиск и замещение. В этом разделе сформулированы задачи обобщенного поиска и замещения элементов в гнездовых массивах (J, K и L). В конце статьи в разделе II приведенного фрагмента mathcad-документа предложены рекурсивные функции для решения указанных задач. Основополагающей из них является функция equG(ma1, mal), играющая роль оператора «обобщенного логического равенства», т.е. проверяющая, являются ли два гнездовых массива mal и ma2 обобщенно равными.

Прежде чем формулировать решаемые задачи, нам необходимо ввести понятие обобщенного равенства двух гнездовых массивов A и B. К этому и приступим.

Будем считать, что в A или в B могут быть элементы, равные любому другому элементу. Прежде всего, надо условиться об обозначении таких «обобщенных» элементов. Если в A и (или) в B нет специальных элементов NaN(Not а Number), то данный скаляр подходит для наших целей. При наличии в A или в B элементов NaN в качестве обобщенного значения может быть взято любое достаточно большое число или какая-либо строка, которые не встречаются ни в A, ни в B. Будем считать, что для обобщенных значений используется именно скаляр NaN.

Определение 1. Два гнездовых массива mal и ma2 обобщенно равны, если у них на верхнем уровне вложенности совпадают количества строк и столбцов, а все их соответствующие друг другу элементы равны, причем считается, что при любых a из mal и b из ma2: (NaN = b) = 1, (a = NaN) = 1, (NaN = NaN) = 1 (заметьте, что в PTC Mathcad (NaN = NaN) = 0!) [1. С. 465].

Определение 2. Пусть объект obj — скаляр, строка, простой или гнездовой массив, ma — простой или гнездовой массив. Говорят, что obj обобщенно входит в ma, если obj обобщенно равно ma или obj обобщенно равно какому-либо элементу ma на любом его уровне вложенности. Поиск обобщенных вхождений obj в ma будем называть обобщенным поиском [1. С. 465].

Задача /. Обобщенное равенство

Построить функцию, проверяющую, являются ли два объекта (числа, строки, простые или гнездовые массивы) обобщенно равными.

Задачи K. Обобщенные вхождения объектов в гнездовые массивы

K1. Выяснить, сколько раз объект x обобщенно входит в гнездовую матрицу ma. При наличии таких вхождений возвратить матрицу [x n], где n — количество вхождений x в ma, при отсутствии вхождений — слово "нет".

K2. Выяснить, имеются ли обобщенные вхождения объекта в гнездовую матрицу ma. Если да, то возвратить вектор позиций вхождения, если нет — слово " нет".

K3. Выяснить, имеются ли обобщенные вхождения объекта в гнездовую матрицу ma. Если да, то возвратить матрицу позиций вхождения, строки которой имеют вид [elepos], где ele — образ xв ma,pos — позиция ele в ma. При отсутствии вхождений должно возвращаться слово "нет".

Задачи L. Замещение объектов в гнездовой матрице

L1. Заменить все обобщенные вхождения объекта x в гнездовой матрице ma (x^ma) объектами y.

L2. Заменить элемент из позиции pos гнездовой матрицы ma объектом y.

L3. Пусть vpos — вектор позиций в ma, vy — вектор объектов. Заменить элементы гнездовой матрицы ma в позициях vpos соответствующими компонентами vy. Если в vу есть лишние объекты, то они должны игнорироваться, если в vy недостает объектов, то вместо них необходимо использовать последнюю компоненту vy.

Замечание. Задачи L2 и L3 связаны с замещением элементов в гнездовых массивах на конкретных позициях. Поскольку такое замещение не опирается на наличие или отсутствие в массиве элементов NaN, для решения L2 и L3 нет необходимости строить новые функции. Решать их можно ранее созданными функциями repo и repov.

Фрагмент (1-8)

Ж1

Поиск и замещение в гнездовых массивах

Создаваемые функции решения сформулированных задач будем проверять на гнездовых массивах из соответствующих разделов или на гнездовом массиве:

аО:=

2 [19 3] Л 1

2 [2 19]

[2 191

2 [19 3] 4 1

I. Простой поиск и замещение элементов в гнездовых массивах Решение задач F

Я. Для решения задачи Я предлагается рекурсивная функция е/ероъ(тз,р), где та - гнездовая матрица и р - вспомогательный параметр для формирования позиций элементов при рекурсивных вызовах. По е/ероя формируется матрица о1 всех элементов та и их позиций, включая и саму матрицу та.

elepos (ma ,р) :=

of *— [ ma р] for j e О.. cols (ma) — 1 fori e 0„ rows (ma) — 1 [b p]^Jnia. . \i j]j

if IsArray(fe) rt— elepos[b,p) if rows(r)> 1

for к € 1 ..rows(г) — 1

stack/p.r \ t, 1 I *,it

else

||r«-|b p]

otstack (of, r)

ot

maelepoa{ma) :=

ot eiepos(iiia,[0 0]) submatrix (of, 1, rows (of) — 1, 0,1)

t := maelepos (aO) 12 := submatrix (¿,12,22,0,1)

По тае/еро5 из матрицы-результата оС, сформированного рекурсивной функцией е/ероз удалятся первая строка

г 1 := виЬтаМх (¿,0,11,0,1)

(3:= ннЬтаГпх ,23 ,гows(f) — 1,0,1)

Фрагмент (2-8)

*

Фрагмент (3-8)

pick

аО,

] 3 О 1 О 1

=[19 3|

а. Для решения задачи 62 предлагаются функция р/скуипи рекурсивная функция р!скуг.

pickv(ma,vp) ■■=

pickvrfina, vp) ■■=

for m € О.. rows (tip)— 1 \ot p] vp J

for к € О.. rows (p) — 1

ot — ot wp «—oi

m

wp

ot *~ ^ pick ^nia, | if last (up) > О

pickv

nO,

I 3 0 1 0 1 0 1 1 3 0 1

t ■■= pi/kvr

aO,

0 1 1 3 О 1

tip submatrix (wp, 1, bust (vp), 0,0) stack [at, pirkvr (ma, up))

Решение задач Н

АЛ. Для решения задачи /Л предлагается функция т.

ш(х,та) := М*— е1еров(та, ["х" "х"]) гслн(М) - I

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

£ (""..■) 1Г(п = 0,"по",[х п])

АО. Для решения задачи Н1 предлагается функция ш. гт!(т,та):=

t =

7

2 [19 3] 4 1

\М р]«— [eiepos(mn,["x" "з for к е 0.. rows (Af) -1 ¿1) of

if x=M

[oiP p + 1]

if P = 0,"no",oi)

ш([2 19],о0)=[(2 19] 2] in(77,а())-"по" т(2,а0)=[2 5]

Фрагмент (4-8)

Фрагмент (5-8)

Фрагмент (6-8)

II. Обобщенный поиск и замещение элементов в гнездовых массивах

Решение задач J.. Одно из возможных решений этой задачи представлено ниже логической функцией equG(mal,ma2)l возвращающей 1, если массивы mal и mal обобщенно равны, и 0 - в противном случае.

equG(a,b):=

if Is А г ray ( а) л Ik А г ray (b)

L*— (rows (н) = rows (/>))л(со1н (a) = cols(fc)) for t e 0.. rows (a) — 1 for j € O..cols(t>)— 1

"if L=1

f* A.,]

if IsNaN(iJvIsNaN(y)v(IsNaN(x)AlsNaN(y))v(x = y)

||l—I

else if -.IsArray(x}A->IsArray(y)

|| М-Р

else

I L*-equC(x,y)

Ise

li,—bNaN(< t>) v(IsNaN(a)AlsNaN(b))v(a - fe)

xl !=

x2-.=

3 [19 3] 1

NaN

NaN

3 [19 3] 1

NaN

NaN

yl !=

y2:=

3 [19 NaN] 1

NaN

1

3 [19 NaN] 1

NaN

1

equG[x\ , t/1 ) = 1

equC(x 2,y2)=0

equG(x 1 ,yl)= 1 equC(x2,y2) = 0 equC[ 7,Г>) = 0 eçuC(7,xl)=0 equG(NaN, 5) = 1 egiiC(5,NaAi) = l equG (7,5) = 0 equC(NaN ,NaN) = *i

Решение задач К

К1. Для решения задачи предлагается функция ¡пв, гпС(х,та)«= М — е1еро.ч(та, [О о])

ги*х(М) - I

п <— еаиС (х.М ^

I

¡Г(п = 0,"по",[аг п])

Фрагмент (7-8)

К1. Для решения задачи А2 предлагается функция invG.

muC(z,ma)>= [М р] *-\elepos(ma, [их" "х"]) О] for к € 0.. rows (Л/) — 1 If equG

ot

pj-p^p+lj

p = 0,"no" ,ot)

A3. Для решения задачи A3 предлагается функция ттС,

ттС(х,та)г= [Л/ р] — "у"]) 0]

for fc е О.. rows (М) — 1 if equG^x,M\

if

Г ot ot p]*-[M Л/ p+ll [ p,o p,i [ к,о t.i r j

p = О, uno", ot)

60==

2 [19 3] 4 1

5 7 2 [2 19] 5

\NaN 19]

7 2 [19 3]

4 1

inC([№iN 2],bO)=J[JVdiV 2] l]

inG([2 NaN],M)=|[2 NaN] 3j inG|[77 78],60) = [[77 78] l]

«G(2,b0)=(2 5] tnvG(2^bO) =

[1 0]

1 1

0 0

0 2 0 0

0 3

о 0

1 3 0 t

0 it

inmC (2,60 ) =

i' »1 [i i] [i |[; i

2 NaN 2 1 3 0 1 0 0

itiG(77,bO) = [77 l] ewG(77,60)=[fjj ®J1 mmG(77,W)) =

NaN 0 3!1

0 ojj

inC([NaW 19],bO) = [[JVa/V 19] 3] mrCflJVa/V 19],60) = [l 1

»to 3] [s;]]

inmG(\NaN 19], bO) =s

[2 19] \NaN 19] NaN [1 1] [0 3] 3

0 0

Решение задачи С

¿1. Для решения задачи ¿1 предлагается рекурсивная функция гев.

Фрагмент (8-8)

Функции для решения задач F-L. В этом пункте на восьми фрагментах mathcad-документа представлены функции для решения перечисленных ранее задач на простой и обобщенный поиск и замещение. Соответствие имен задач и функций таково: F1 — elepos, maelepos; F2 — resto; G1 — pick, pickv; G2 — pickvr; H1 — in, H2 — inv; I1 — re; I2 — repo, I3 — repov; J — equG, K1 — inG, K2 — invG, K3 — inmG, L1 — reG, L2 — repo, L3 — repov.

ЛИТЕРАТУРА

[1] Григорьев С.Г., Есаян А.Р. Простой и обобщенный поиск элементов в гнездовых массивах и их замещение // Чебышевский сборник. 2015. Т. XVI. Вып. 3 (55). C. 499—513.

[2] Есаян А.Р. Обучение алгоритмизации на основе рекурсии: учебное пособие для студентов педвузов. Тула: ТГПУ им. Л.Н. Толстого, 2001. 215 с.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

[3] Есаян А.Р., Добровольский Н.М. Гнездовые массивы и рекурсия // Алгебра, теория чисел и дискретная геометрия. Современные проблемы и приложения: Материалы XXIII международной конференции. Тула, 2015. С. 319—321.

[4] Есаян А.Р., Якушин А.В. Векторизация и гнездовые массивы // Алгебра, теория чисел и дискретная геометрия. Современные проблемы и приложения: Материалы XXIII международной конференции. Тула, 2015. С. 328—330.

[5] Есаян А.Р., Добровольский Н.М. Гнездовые массивы и рекурсия // Чебышевский сборник. 2015. Том XVI. Выпуск 3 (55). С. 481—498.

[6] Есаян А.Р., Якушин А.В. Векторизация и гнездовые массивы // Чебышевский сборник. 2015. Том XVI. Вып. 3 (55). C. 499—513.

[7] MaxfieldB., EssentialP.E. PTC Mathcad Prime 3.0. A Guide for New and Cur-rent Users. New York, Academic Press is an imprint of Elsevier. 2013. No. 11. P. 563.

[8] Wessenlingh Н, Waard H. Calculate & Communicate with Mathcad Prime 3.0, Delft Academic Press, The Netherlands, First edition 2014.

SEARCH AND SUBSTITUTION IN NESTED ARRAYS

S.G. Grigoriev1, A.R. Esayan2

1 Moscow city pedagogical university Sheremetyevskaya str., 29, Moscow, Russia, 127521 2 Tula state pedagogical university of L.N. Tolstoy Prospekt Lenina, 125, Tula, Russia, 300026

In this article simple algorithms of the solution of recursive algorithms for the simple and generalized search and replacement of elements are given in nested matrixes. The new tasks connected with nested matrixes with numerical or line elements are stated. For record of algorithms language of the environment of engineering and scientific calculations PTC Mathcad Prime is used. In the course of their decision at students the logical, algorithmic information thinking develops.

Key words: informatics, nested matrixes, computing tasks, information technologies, training informatization

REFERENCES

[1] Grigor'ev S.G., Esajan A.R. Prostoj i obobshhennyjpoiskjelementov vgnezdovyh massivah i ih zameshhenie [Idle time and the generalized search of elements in nested massifs and their replacement]. Chebyshevskij sbornik [Chebyshevskij sbornik]. 2015. T. XVI. No 3 (55). Pp. 499—513.

[2] Esajan A.R. Obuchenie algoritmizacii na osnove rekursii [Training of algorithmization on the basis of a recursion]: uchebnoeposobie dlja studentovpedvuzov. Tula: TGPU im. L.N. Tolstogo, 2001. 215 p.

[3] Esajan A.R., Dobrovol'skij N.M. Gnezdovye massivy i rekursija [Nested massifs and recursion]. Algebra, teorija chisel i diskretnaja geometrija. Sovremennyeproblemy iprilozhenija [Algebra, theory of numbers and discrete geometry. Modern problems and applications]: Materialy XXIII mezhdunarodnoj konferencii. Tula, 2015. Pp. 319—321.

[4] Esajan A.R., Jakushin A.V. Vektorizacija ignezdovye massivy [Vectorization and nested massifs]. Algebra, teorija chisel i diskretnaja geometrija. Sovremennye problemy iprilozhenija [Algebra, theory of numbers and discrete geometry. Modern problems and applications]: Materialy XXIII mezhdunarodnoj konferencii. Tula, 2015. Pp. 328—330.

[5] Esajan A.R., Dobrovol'skij N.M. Gnez,dovye massivy i rekursija [Nested massifs and recursion]. Chebyshevskij sbornik [Chebyshevskij sbornik]. 2015. T. XVI. No 3 (55). Pp. 481—498.

[6] Esajan A.R., Jakushin A.V. Vektorizacija ignezdovye massivy [Vectorization and nested massifs]. Chebyshevskij sbornik [Chebyshevskij sbornik]. Tula, 2015. T. XVI. No 3 (55). Pp. 499—513.

[7] Maxfield B., Essential P.E. PTC Mathcad Prime 3.0. A Guide for New and Cur-rent Users. New York, Academic Press is an imprint of Elsevier. 2013. No. 11. P. 563.

[8] Wessenlingh N., Waard H. Calculate & Communicate with Mathcad Prime 3.0, Delft Academic Press, The Netherlands, First edition 2014.

i Надоели баннеры? Вы всегда можете отключить рекламу.