diff options
| author | Juan Marín Noguera <juan@mnpi.eu> | 2025-05-16 22:18:44 +0200 |
|---|---|---|
| committer | Juan Marín Noguera <juan@mnpi.eu> | 2025-05-16 22:18:44 +0200 |
| commit | 4f670b750af5c11e1eac16d9cd8556455f89f46a (patch) | |
| tree | e0f8d7b33df2727d89150f799ee8628821fda80a /vol1/2.3.3.lyx | |
| parent | 16ccda6c459c0fd7ca2081e9d541124c28b0c556 (diff) | |
Changed layout for more manageable volumes
Diffstat (limited to 'vol1/2.3.3.lyx')
| -rw-r--r-- | vol1/2.3.3.lyx | 2031 |
1 files changed, 2031 insertions, 0 deletions
diff --git a/vol1/2.3.3.lyx b/vol1/2.3.3.lyx new file mode 100644 index 0000000..56bc0e1 --- /dev/null +++ b/vol1/2.3.3.lyx @@ -0,0 +1,2031 @@ +#LyX 2.4 created this file. For more info see https://www.lyx.org/ +\lyxformat 620 +\begin_document +\begin_header +\save_transient_properties true +\origin unavailable +\textclass book +\begin_preamble +\input defs +\usepackage{calc} +\end_preamble +\use_default_options true +\maintain_unincluded_children no +\language english +\language_package default +\inputencoding utf8 +\fontencoding auto +\font_roman "default" "default" +\font_sans "default" "default" +\font_typewriter "default" "default" +\font_math "auto" "auto" +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_roman_osf false +\font_sans_osf false +\font_typewriter_osf false +\font_sf_scale 100 100 +\font_tt_scale 100 100 +\use_microtype false +\use_dash_ligatures true +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\float_placement class +\float_alignment class +\paperfontsize default +\spacing single +\use_hyperref false +\papersize default +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 1 +\use_formatted_ref 0 +\use_minted 0 +\use_lineno 0 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\is_math_indent 0 +\math_numbering_side default +\quotes_style english +\dynamic_quotes 0 +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tablestyle default +\tracking_changes false +\output_changes false +\change_bars false +\postpone_fragile_content false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\docbook_table_output 0 +\docbook_mathml_prefix 1 +\end_header + +\begin_body + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc1[20] +\end_layout + +\end_inset + +If we had only +\family typewriter +LTAG +\family default +, + +\family typewriter +INFO +\family default + and +\family typewriter +RTAG +\family default + fields (not +\family typewriter +LLINK +\family default +) in a level order sequential representation like (8), + would it be possible to reconstruct the +\family typewriter +LLINK +\family default +s? + (In other words, + are the +\family typewriter +LLINK +\family default +s redundant in (8), + as the +\family typewriter +RLINK +\family default +s are in (3)?) +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +Yes, + although the traversal might be less efficient. + First, + we would have to collect the roots of the trees to form the first level. + These roots are precisely the first family, + that is, + the first sequence of nodes up to an including one with +\begin_inset Formula $\mathtt{RTAG}=1$ +\end_inset + +. + We count the number of such nodes that have children, + which are the ones with +\begin_inset Formula $\mathtt{LTAG}=0$ +\end_inset + +. + For the second level, + we take as many families as nodes with children in the first level. + Each of those families corresponds to the children of one of those nodes, + in order. + For the third level, + we take as many families as nodes with children in the second level, + and so on. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc3[24] +\end_layout + +\end_inset + +Modify Algorithm 2.3.2D so that it follows the ideas of Algorithm F, + placing the derivatives it computes as intermediate results on a stack, + instead of recording their locations in an anomalous fashion as is done in step D3. + (See exercise 2.3.2–21.) The stack may be maintained by using the +\family typewriter +RLINK +\family default + field in the root of each derivative. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +[Initalize.] Set +\begin_inset Formula $\mathtt{P}\gets\mathtt{Y}\$$ +\end_inset + +. +\end_layout + +\begin_layout Enumerate +\begin_inset CommandInset label +LatexCommand label +name "enu:e23324b" + +\end_inset + +[Differentiate.] Set +\begin_inset Formula $d\gets\mathtt{DEGREE(P)}$ +\end_inset + +. + If +\begin_inset Formula $d=0$ +\end_inset + +, + set +\begin_inset Formula $\mathtt{ARGS}\gets0$ +\end_inset + +, + otherwise set +\begin_inset Formula $t\gets\mathtt{RLINK}^{d-1}\mathtt{(LLINK(DY))}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{DY}\gets\mathtt{RLINK(}t\mathtt{)}$ +\end_inset + +, + and +\begin_inset Formula $\mathtt{RLINK(}t\mathtt{)}\gets\Lambda$ +\end_inset + +. + Then perform the routine +\begin_inset Formula $\mathtt{DIFF[TYPE(P)]}$ +\end_inset + +. + (This routine uses +\family typewriter +P +\family default + and +\family typewriter +ARGS +\family default + as its arguments and it is in change of freeing the nodes of +\family typewriter +ARGS +\family default + that will not be part of the result, + which it should store in +\family typewriter +Q +\family default +.) +\end_layout + +\begin_layout Enumerate +[Save link.] Set +\begin_inset Formula $\mathtt{RLINK(Q)}\gets\mathtt{LLINK(DY)}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{LLINK(DY)}\gets\mathtt{Q}$ +\end_inset + +, + and +\begin_inset Formula $\mathtt{P}\gets\mathtt{P}\$$ +\end_inset + +. +\end_layout + +\begin_layout Enumerate +[Done?] If +\begin_inset Formula $\mathtt{P}=\mathtt{Y}$ +\end_inset + +, + terminate. + Otherwise go back to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:e23324b" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc6[24] +\end_layout + +\end_inset + +Suppose that the nodes of an +\emph on +oriented +\emph default + forest have three link fields, + +\family typewriter +PARENT +\family default +, + +\family typewriter +LCHILD +\family default +, + and +\family typewriter +RLINK +\family default +, + but only the +\family typewriter +PARENT +\family default + link has been set up to indicate the tree structure. + The +\family typewriter +LCHILD +\family default + field of each node is +\begin_inset Formula $\Lambda$ +\end_inset + + and the +\family typewriter +RLINK +\family default + fields are set as a linear list that simply links the nodes together in some order. + The link variable +\family typewriter +FIRST +\family default + points to the first node, + and the last node has +\begin_inset Formula $\mathtt{RLINK}=\Lambda$ +\end_inset + +. + Design an algorithm that goes through these nodes and fills in the +\family typewriter +LCHILD +\family default + and +\family typewriter +RLINK +\family default + fields compatible with the +\family typewriter +PARENT +\family default + links, + so that a triply linked tree representation like that in Fig. + 26 is obtained. + Also, + reset +\family typewriter +FIRST +\family default + so that it now points to the root of the first tree in the representation. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +[Initialize.] Set +\begin_inset Formula $\mathtt{C}\gets\mathtt{FIRST}$ +\end_inset + + and +\begin_inset Formula $\mathtt{FIRST}\gets\Lambda$ +\end_inset + + (we haven't found any root yet). +\end_layout + +\begin_layout Enumerate +[Done?] If +\begin_inset Formula $\mathtt{C}=\Lambda$ +\end_inset + +, + terminate. +\end_layout + +\begin_layout Enumerate +[Add child.] Set +\begin_inset Formula $p\gets\mathtt{PARENT(C)}$ +\end_inset + + and +\begin_inset Formula $\mathtt{N}\gets\mathtt{RLINK(C)}$ +\end_inset + +. + If +\begin_inset Formula $p=\Lambda$ +\end_inset + +, + set +\begin_inset Formula $\mathtt{RLINK(C)}\gets\mathtt{FIRST}$ +\end_inset + + and +\begin_inset Formula $\mathtt{FIRST}\gets\mathtt{C}$ +\end_inset + +, + otherwise set +\begin_inset Formula $\mathtt{RLINK(C)}\gets\mathtt{FCHILD(}p\mathtt{)}$ +\end_inset + + and +\begin_inset Formula $\mathtt{FCHILD(}p\mathtt{)}\gets\mathtt{C}$ +\end_inset + +. + (In assembly we might just set +\begin_inset Formula $p$ +\end_inset + + to some function of +\family typewriter +LOC(FIRST) +\family default + whenever +\begin_inset Formula $p=\Lambda$ +\end_inset + +.) +\end_layout + +\begin_layout Enumerate +[Advance.] Set +\begin_inset Formula $\mathtt{C}\gets\mathtt{N}$ +\end_inset + + and go to the previous step. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc11[24] +\end_layout + +\end_inset + +( +\emph on +Equivalence declarations. +\emph default +) Several compiler languages, + notably FORTRAN, + provide a facility for overlapping the memory locations assigned to sequentially stored tables. + The programmer gives the compiler a set of relations of the form +\begin_inset Formula $\mathtt{X[}j\mathtt{]}\equiv\mathtt{Y[}k\mathtt{]}$ +\end_inset + +, + which means that variable +\begin_inset Formula $\mathtt{X[}j+s\mathtt{]}$ +\end_inset + + is to be assigned to the same location as variable +\begin_inset Formula $\mathtt{Y[}k+s\mathtt{]}$ +\end_inset + + for all +\begin_inset Formula $s$ +\end_inset + +. + Each variable is also given a range of allowable subscripts: + +\begin_inset Quotes eld +\end_inset + + +\family typewriter +ARRAY X[ +\begin_inset Formula $l:u$ +\end_inset + +] +\family default + +\begin_inset Quotes erd +\end_inset + + means that space is to be set aside in memory for the table entries +\family typewriter +X[ +\begin_inset Formula $l$ +\end_inset + +] +\family default +, + +\family typewriter +X[ +\begin_inset Formula $l+1$ +\end_inset + +] +\family default +, + ..., + +\family typewriter +X[ +\begin_inset Formula $u$ +\end_inset + +] +\family default +. + For each equivalence class of variables, + the compiler reserves as small a block of consecutive memory locations as possible, + to contain all the table entries for the allowable subscript values of these variables. +\end_layout + +\begin_layout Standard +For example, + suppose we have +\family typewriter +ARRAY X[ +\begin_inset Formula $0:10$ +\end_inset + +] +\family default +, + +\family typewriter +ARRAY Y[ +\begin_inset Formula $3:10$ +\end_inset + +] +\family default +, + +\family typewriter +ARRAY A[ +\begin_inset Formula $1:1$ +\end_inset + +] +\family default +, + and +\family typewriter +ARRAY Z[ +\begin_inset Formula $-2:0$ +\end_inset + +] +\family default +, + plus the equivalences +\begin_inset Formula $\mathtt{X[}7\mathtt{]}\equiv\mathtt{Y[}3\mathtt{]}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{Z[}0\mathtt{]}\equiv\mathtt{A[}0\mathtt{]}$ +\end_inset + +, + and +\begin_inset Formula $\mathtt{Y[}1\mathtt{]}\equiv\mathtt{A[}8\mathtt{]}$ +\end_inset + +. + We must set aside 20 consecutive locations +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +begin{center} +\end_layout + +\begin_layout Plain Layout + + +\backslash +begin{tikzpicture}[scale=0.55,circle dotted/.style={ +\end_layout + +\begin_layout Plain Layout + + dash pattern=on 0 off .55cm, + line cap=round}] +\end_layout + +\begin_layout Plain Layout + + +\backslash +small +\backslash +def +\backslash +sep{0.15} +\end_layout + +\begin_layout Plain Layout + + +\backslash +def +\backslash +ab#1#2{++(1cm, +\backslash +sep) node[above]{$ +\backslash +mathtt{#2}_{#1}$} ++(0,- +\backslash +sep)} +\end_layout + +\begin_layout Plain Layout + + +\backslash +def +\backslash +be#1#2{++(1cm,- +\backslash +sep) node[below]{$ +\backslash +mathtt{#2}_{#1}$} ++(0, +\backslash +sep)} +\end_layout + +\begin_layout Plain Layout + + +\backslash +def +\backslash +abe#1#2#3#4{++(1cm, +\backslash +sep) node[above]{$ +\backslash +mathtt{#2}_{#1}$} +\end_layout + +\begin_layout Plain Layout + + ++(0,-2* +\backslash +sep) node[below]{$ +\backslash +mathtt{#4}_{#3}$} ++(0, +\backslash +sep)} +\end_layout + +\begin_layout Plain Layout + + +\backslash +draw[line width = 3,circle dotted] (0,0) -- (19cm,0); +\end_layout + +\begin_layout Plain Layout + + +\backslash +draw (-1,0) +\backslash +be{-2}Z +\backslash +be{-1}Z +\backslash +be0Z +\backslash +be1A ++(1cm,0) +\end_layout + +\begin_layout Plain Layout + + +\backslash +ab0X +\backslash +ab1X +\backslash +ab2X +\backslash +ab3X +\backslash +ab4X +\end_layout + +\begin_layout Plain Layout + + +\backslash +ab5X +\backslash +ab6X +\backslash +abe7X3Y +\backslash +abe8X4Y +\backslash +abe9X5Y +\end_layout + +\begin_layout Plain Layout + + +\backslash +abe{10}X6Y +\backslash +be7Y +\backslash +be8Y +\backslash +be9Y +\backslash +be{10}Y; +\end_layout + +\begin_layout Plain Layout + + +\backslash +end{tikzpicture} +\end_layout + +\begin_layout Plain Layout + + +\backslash +end{center} +\end_layout + +\end_inset + +for these variables. + (The location following +\begin_inset Formula $\mathtt{A[}1\mathtt{]}$ +\end_inset + + is not an allowable subscript value for any of the arrays, + but it must be reserved anyway.) +\end_layout + +\begin_layout Standard +The object of this exercise is to modify Algorithm E so that it applies to the more general situation just described. + Assume that we are writing a compiler for such a language, + and the tables inside our compiler program itself have one node for each array, + containing the fields +\family typewriter +NAME +\family default +, + +\family typewriter +PARENT +\family default +, + +\family typewriter +DELTA +\family default +, + +\family typewriter +LBD +\family default +, + and +\family typewriter +UBD +\family default +. + Assume that the compiler program has previously processed all the +\family typewriter +ARRAY +\family default + declarations, + so that if +\family typewriter +ARRAY X[ +\begin_inset Formula $l:u$ +\end_inset + +] +\family default + has appeared and if +\family typewriter +P +\family default + points to the node for +\family typewriter +X +\family default +, + then +\begin_inset Formula +\begin{align*} +\mathtt{NAME(P)} & =\text{``\texttt{X}''}, & \mathtt{PARENT(P)} & =\Lambda, & \mathtt{DELTA(P)} & =0,\\ +\mathtt{LBD(P)} & =l, & \mathtt{UBD(P)} & =u. +\end{align*} + +\end_inset + +The problem is to design an algorithm that processes the equivalence declarations, + so that, + after this algorithm has been performed, +\end_layout + +\begin_layout Quote +\begin_inset Formula $\mathtt{PARENT(P)}=\Lambda$ +\end_inset + + means that locations +\begin_inset Formula $\mathtt{X[LBD(P)]},...,\mathtt{X[UBD(P)]}$ +\end_inset + + are to be reserved in memory for this equivalence class; +\end_layout + +\begin_layout Quote +\begin_inset Formula $\mathtt{PARENT(P)}=\mathtt{Q}\neq\Lambda$ +\end_inset + + means that location +\begin_inset Formula $\mathtt{X[}k\mathtt{]}$ +\end_inset + + equals location +\begin_inset Formula $\mathtt{Y[}k+\mathtt{DELTA(P)]}$ +\end_inset + +, + where +\begin_inset Formula $\mathtt{NAME(Q)}=\text{``\texttt{Y}''}$ +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +begin{samepage} +\end_layout + +\end_inset + +For example, + before the equivalences listed above we might have the nodes +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +vspace{2pt} +\end_layout + +\end_inset + + +\begin_inset Newline newline +\end_inset + + +\begin_inset Tabular +<lyxtabular version="3" rows="5" columns="6"> +<features tabularvalignment="middle"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +P +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +NAME(P) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +PARENT(P) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +DELTA(P) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +LBD(P) +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +UBD(P) +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\alpha$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +X +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\Lambda$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +10 +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\beta$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +Y +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\Lambda$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +3 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +10 +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\gamma$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +A +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\Lambda$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +1 +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\delta$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +Z +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\Lambda$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $-2$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +vspace{4pt} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +noindent +\end_layout + +\end_inset + +After the equivalences are processed, + the nodes might appear thus: +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +vspace{2pt} +\end_layout + +\end_inset + + +\begin_inset Newline newline +\end_inset + + +\begin_inset Tabular +<lyxtabular version="3" rows="4" columns="6"> +<features tabularvalignment="middle"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\text{\makebox[\widthof{\texttt{P}}][c]{\ensuremath{\alpha}}}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\text{\makebox[\widthof{\texttt{NAME(P)}}][c]{\texttt{X}}}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\text{\makebox[\widthof{\texttt{PARENT(P)}}][c]{\ensuremath{\Lambda}}}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\text{\makebox[\widthof{\texttt{DELTA(P)}}][c]{\ensuremath{*}}}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\text{\makebox[\widthof{\texttt{LBD(P)}}][c]{\ensuremath{-5}}}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\text{\makebox[\widthof{\texttt{UBD(P)}}][c]{14}}$ +\end_inset + + +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\beta$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +Y +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\alpha$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +4 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $*$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $*$ +\end_inset + + +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\gamma$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +A +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\delta$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +0 +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $*$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $*$ +\end_inset + + +\end_layout + +\end_inset +</cell> +</row> +<row> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\delta$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout + +\family typewriter +Z +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $\alpha$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $-3$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $*$ +\end_inset + + +\end_layout + +\end_inset +</cell> +<cell alignment="center" valignment="top" usebox="none"> +\begin_inset Text + +\begin_layout Plain Layout +\begin_inset Formula $*$ +\end_inset + + +\end_layout + +\end_inset +</cell> +</row> +</lyxtabular> + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +noindent +\end_layout + +\end_inset + +( +\begin_inset Quotes eld +\end_inset + + +\begin_inset Formula $*$ +\end_inset + + +\begin_inset Quotes erd +\end_inset + + denotes irrelevant information.) +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +end{samepage} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Design an algorithm that makes this transformation. + Assume that inputs to your algorithm have the form +\begin_inset Formula $(\mathtt{P},j,\mathtt{Q},k)$ +\end_inset + +, + denoting +\begin_inset Formula $\mathtt{X[}j\mathtt{]}\equiv\mathtt{Y[}k\mathtt{]}$ +\end_inset + +, + where +\begin_inset Formula $\mathtt{NAME(P)}=\text{``X''}$ +\end_inset + + and +\begin_inset Formula $\mathtt{NAME(Q)}=\text{``Y''}$ +\end_inset + +. + Be sure to check whether the equivalences are contradictory; + for example, + +\begin_inset Formula $\mathtt{X[}1\mathtt{]}\equiv\mathtt{Y[}2\mathtt{]}$ +\end_inset + + contradicts +\begin_inset Formula $\mathtt{X[}2\mathtt{]}\equiv\mathtt{Y[}1\mathtt{]}$ +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +\begin_inset CommandInset label +LatexCommand label +name "enu:e23311a" + +\end_inset + +[Read input.] Read a line +\begin_inset Formula $(\mathtt{P},j,\mathtt{Q},k)$ +\end_inset + +, + but if there are no more lines, + terminate the algorithm. +\end_layout + +\begin_layout Enumerate +[Find roots.] If +\begin_inset Formula $\mathtt{PARENT(P)}\neq\Lambda$ +\end_inset + +, + set +\begin_inset Formula $j\gets j+\mathtt{DELTA(P)}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{P}\gets\mathtt{PARENT(P)}$ +\end_inset + +, + and repeat this step. + If +\begin_inset Formula $\mathtt{PARENT(Q)}\neq\Lambda$ +\end_inset + +, + set +\begin_inset Formula $k\gets k+\mathtt{DELTA(Q)}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{Q}\gets\mathtt{PARENT(Q)}$ +\end_inset + +, + and repeat this step. +\end_layout + +\begin_layout Enumerate +[Merge trees.] If +\begin_inset Formula $\mathtt{P}\neq\mathtt{Q}$ +\end_inset + +, + set +\begin_inset Formula $\mathtt{PARENT(P)}\gets\mathtt{Q}$ +\end_inset + + +\begin_inset Formula $\mathtt{DELTA(P)}\gets k-j$ +\end_inset + +, + +\begin_inset Formula $\mathtt{LBD(Q)}\gets\min\{\mathtt{LBD(Q)},\mathtt{LBD(P)}+\mathtt{DELTA(P)}\}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{UBD(Q)}\gets\max\{\mathtt{UBD(Q)},\mathtt{UBD(P)}+\mathtt{DELTA(P)}\}$ +\end_inset + +. + Otherwise, + if +\begin_inset Formula $j\neq k$ +\end_inset + +, + notify a contradiction and terminate the algorithm. + Finally go to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:e23311a" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc17[25] +\end_layout + +\end_inset + +Algorithm F evaluates a +\begin_inset Quotes eld +\end_inset + +bottom-up +\begin_inset Quotes erd +\end_inset + + locally defined function, + namely, + one that should be evaluated at the children of a node before it is evaluated at the node. + A +\begin_inset Quotes eld +\end_inset + +top-down +\begin_inset Quotes erd +\end_inset + + locally defined function +\begin_inset Formula $f$ +\end_inset + + is one in which the value of +\begin_inset Formula $f$ +\end_inset + + at a node +\begin_inset Formula $x$ +\end_inset + + depends only on +\begin_inset Formula $x$ +\end_inset + + and the value of +\begin_inset Formula $f$ +\end_inset + + at the +\emph on +parent +\emph default + of +\begin_inset Formula $x$ +\end_inset + +. + Using an auxiliary stack, + design an algorithm analogous to Algorithm F that evaluates a +\begin_inset Quotes eld +\end_inset + +top-down +\begin_inset Quotes erd +\end_inset + + function +\begin_inset Formula $f$ +\end_inset + + at each node of a tree. + (Like Algorithm F, + your algorithm should work efficiently on trees that have been stored in +\emph on +postorder +\emph default + with degrees, + as in (9).) +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Enumerate +[Initialize.] Set the stack to the single element +\begin_inset Formula $(\infty,\Lambda)$ +\end_inset + +, + and let +\family typewriter +P +\family default + point to the +\emph on +last +\emph default + ode of the forest in post-order. +\end_layout + +\begin_layout Enumerate +\begin_inset CommandInset label +LatexCommand label +name "enu:e23317b" + +\end_inset + +[Evaluate +\begin_inset Formula $f$ +\end_inset + +.] Let +\begin_inset Formula $(d,v)$ +\end_inset + + be the value at the top of the stack. + Evaluate +\begin_inset Formula $f(\mathtt{NODE(P)},v)$ +\end_inset + + and save the result as +\begin_inset Formula $\mathtt{VALUE(P)}$ +\end_inset + +. + Then push +\begin_inset Formula $(\mathtt{DEGREE(P)},\mathtt{VALUE(P)})$ +\end_inset + + to the stack. +\end_layout + +\begin_layout Enumerate +[Update the stack.] Pop the element +\begin_inset Formula $(p,v)$ +\end_inset + + from the stack. + If +\begin_inset Formula $p=0$ +\end_inset + +, + repeat this step. + Otherwise push +\begin_inset Formula $(p-1,v)$ +\end_inset + + into the stack. +\end_layout + +\begin_layout Enumerate +[Advance.] If +\family typewriter +P +\family default + is the first node in postorder, + terminate the algorithm. + Otherwise set +\family typewriter +P +\family default + to its predecessor in postorder and return to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:e23317b" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + +. +\end_layout + +\end_body +\end_document |
