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.1.lyx | |
| parent | 16ccda6c459c0fd7ca2081e9d541124c28b0c556 (diff) | |
Changed layout for more manageable volumes
Diffstat (limited to 'vol1/2.3.1.lyx')
| -rw-r--r-- | vol1/2.3.1.lyx | 1075 |
1 files changed, 1075 insertions, 0 deletions
diff --git a/vol1/2.3.1.lyx b/vol1/2.3.1.lyx new file mode 100644 index 0000000..92b6c2b --- /dev/null +++ b/vol1/2.3.1.lyx @@ -0,0 +1,1075 @@ +#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 +\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 +exerc1[01] +\end_layout + +\end_inset + +In the binary tree (2), + let +\family typewriter +INFO(P) +\family default + denote the letter stored in +\family typewriter +NODE(P) +\family default +. + What is +\begin_inset Formula $\mathtt{INFO(LLINK(RLINK(RLINK(T))))}$ +\end_inset + +? +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + + +\begin_inset Formula $H$ +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc4[20] +\end_layout + +\end_inset + +The text defines three basic orders for traversing a binary tree; + another alternative would be to proceed in three steps as follows: +\end_layout + +\begin_layout Enumerate +Visit the root, +\end_layout + +\begin_layout Enumerate +traverse the right subtree, +\end_layout + +\begin_layout Enumerate +traverse the left subtree, +\end_layout + +\begin_layout Standard +using the same rule recursively on all nonempty subtrees. + Does this new order bear any simple relation to the three orders already discussed? +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +Yes, + this is the same as postorder but backwards. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc10[20] +\end_layout + +\end_inset + +What is the largest number of entries that can be in the stack at once, + during the execution of Algorithm T, + if the binary tree has +\begin_inset Formula $n$ +\end_inset + + nodes? + (The answer to this question is very important for storage allocation, + if the stack is being stored consecutively.) +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +There can be up to +\begin_inset Formula $n$ +\end_inset + + nodes in the stack, + in the case that all the right links are null and the tree is just a linked list using the +\begin_inset Formula $\mathtt{RLINK}$ +\end_inset + +. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc13[24] +\end_layout + +\end_inset + +Design an algorithm analogous to Algorithm T that traverses a binary tree in +\emph on +preorder +\emph default +, + and prove that your algorithm is correct. +\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 stack +\family typewriter +A +\family default + empty, + and set the link variable +\begin_inset Formula $\mathtt{P}\gets\mathtt{T}$ +\end_inset + +. +\end_layout + +\begin_layout Enumerate +\begin_inset CommandInset label +LatexCommand label +name "enu:23113b" + +\end_inset + +[ +\begin_inset Formula $\mathtt{P}=\Lambda$ +\end_inset + +?] If +\begin_inset Formula $\mathtt{P}=\Lambda$ +\end_inset + +, + go to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:23113d" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + +. +\end_layout + +\begin_layout Enumerate +\begin_inset CommandInset label +LatexCommand label +name "enu:23113c" + +\end_inset + +[Visit +\begin_inset Formula $\mathtt{P}$ +\end_inset + +.] Visit +\begin_inset Formula $\mathtt{NODE(P)}$ +\end_inset + +. + Do +\begin_inset Formula $\mathtt{A}\Leftarrow\mathtt{RLINK(P)}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{P}\gets\mathtt{LLINK(P)}$ +\end_inset + +, + and return to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:23113b" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + +. +\end_layout + +\begin_layout Enumerate +\begin_inset CommandInset label +LatexCommand label +name "enu:23113d" + +\end_inset + +[Visit right hand side.] If +\family typewriter +A +\family default + is empty, + the algorithm terminates. + Otherwise set +\begin_inset Formula $\mathtt{P}\Leftarrow\mathtt{A}$ +\end_inset + + and return to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:23113b" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + +. +\end_layout + +\begin_layout Standard +We now prove by induction on the number of nodes that, + if we start in step 2, + we traverse the subtree starting at +\begin_inset Formula $\mathtt{P}$ +\end_inset + + in preorder, + leave the stack unchanged, + and proceed to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:23113d" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + +, + which clearly would show that the algorithm is correct. +\end_layout + +\begin_layout Standard +For an empty tree, + this is obvious. + For a tree with +\begin_inset Formula $n$ +\end_inset + + nodes, + that we start with the root is obvious, + we do that at step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:23113c" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + + with the stack empty. + After that step, + setting +\begin_inset Formula $\mathtt{P}\gets\mathtt{LLINK(P)}$ +\end_inset + + and returning to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:23113b" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + + means that we get to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:23113d" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + + after traversing the left subtree, + which by the induction hypothesis would leave us on step 4 with the stack like it was before but adding the node +\begin_inset Formula $\mathtt{RLINK(P)}$ +\end_inset + +. + Then step 4 clearly means to traverse +\begin_inset Formula $\mathtt{RLINK(P)}$ +\end_inset + + and leave +\family typewriter +A +\family default + like it was before starting processing +\family typewriter +P +\family default +. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc16[22] +\end_layout + +\end_inset + +The diagrams in Fig. + 24 help to provide an intuitive characterization of the position of +\begin_inset Formula $\mathtt{NODE(Q}\$\mathtt{)}$ +\end_inset + + in a binary tree, + in terms of the structure near +\begin_inset Formula $\mathtt{NODE(Q)}$ +\end_inset + +: + If +\begin_inset Formula $\mathtt{NODE(Q)}$ +\end_inset + + has a nonempty right subtree, + consider +\begin_inset Formula $\mathtt{Q}=\$\mathtt{P}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{Q}\$=\mathtt{P}$ +\end_inset + + in the upper diagrams; + +\begin_inset Formula $\mathtt{NODE(Q}\$\mathtt{)}$ +\end_inset + + is the +\begin_inset Quotes eld +\end_inset + +leftmost +\begin_inset Quotes erd +\end_inset + + node of that right subtree. + If +\family typewriter + +\begin_inset Formula $\mathtt{NODE(Q)}$ +\end_inset + + +\family default + has an empty right subtree, + consider +\begin_inset Formula $\mathtt{Q}=\mathtt{P}$ +\end_inset + + in the lower diagrams; + +\begin_inset Formula $\mathtt{NODE(Q}\$\mathtt{)}$ +\end_inset + + is located by proceeding upward in the tree until after the first upward step to the right. +\end_layout + +\begin_layout Standard +Give a similar +\begin_inset Quotes eld +\end_inset + +intuitive +\begin_inset Quotes erd +\end_inset + + rule for finding the position of +\begin_inset Formula $\mathtt{NODE(Q}*\mathtt{)}$ +\end_inset + + in a binary tree in terms of the structure near +\family typewriter +NODE(Q) +\family default +. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +If +\begin_inset Formula $\mathtt{NODE(Q)}$ +\end_inset + + has a nonempty left subtree, + consider +\begin_inset Formula $\mathtt{Q}=*\mathtt{P}$ +\end_inset + + in the upper diagrams; + then +\begin_inset Formula $\mathtt{Q}*=\mathtt{P}$ +\end_inset + + is the left child of +\begin_inset Formula $\mathtt{Q}$ +\end_inset + +. + Otherwise, + if +\begin_inset Formula $\mathtt{NODE(Q)}$ +\end_inset + + has a nonempty right subtree, + +\begin_inset Formula $\mathtt{Q}*$ +\end_inset + + is the right child of +\begin_inset Formula $\mathtt{Q}$ +\end_inset + +. + Otherwise both subtrees are empty and +\begin_inset Formula $\mathtt{Q}*$ +\end_inset + + can be found by going upward until finding a node that is a left child (which could be +\begin_inset Formula $\mathtt{Q}$ +\end_inset + + itself) and taking its right sibling. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc17[22] +\end_layout + +\end_inset + +Give an algorithm analogous to Algorithm S for determining +\begin_inset Formula $\mathtt{P}*$ +\end_inset + + in a threaded binary tree. + Assume that the tree has a list head as in (8), + (9), + and (10). +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +If +\family typewriter +P +\family default + points to a node of a threaded binary tree, + this algorithm sets +\begin_inset Formula $\mathtt{Q}\gets\mathtt{P}*$ +\end_inset + +. +\end_layout + +\begin_layout Enumerate +[Is the left subtree nonempty?] If +\begin_inset Formula $\mathtt{LTAG(P)}=1$ +\end_inset + +, + set +\begin_inset Formula $\mathtt{Q}\gets\mathtt{LLINK(P)}$ +\end_inset + + and terminate the algorithm. +\end_layout + +\begin_layout Enumerate +[Search to the right.] Set +\begin_inset Formula $\mathtt{Q}\gets\mathtt{RLINK(P)}$ +\end_inset + +. + If +\begin_inset Formula $\mathtt{RTAG(P)}=1$ +\end_inset + +, + terminate the algorithm. + Otherwise set +\begin_inset Formula $\mathtt{P}\gets\mathtt{Q}$ +\end_inset + + and repeat this step. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +exerc28[00] +\end_layout + +\end_inset + +After Algorithm C has been used to make a copy of a tree, + is the new binary tree +\emph on +equivalent +\emph default + to the original, + or +\emph on +similar +\emph default + to it? +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +It's equivalent (and similar). +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc30[22] +\end_layout + +\end_inset + +Design an algorithm that threads an unthreaded tree; + for example, + it should transform (2) into (10). + +\emph on +Note: + +\emph default + Always use notations like +\begin_inset Formula $\mathtt{P}*$ +\end_inset + + and +\begin_inset Formula $\mathtt{P}\$$ +\end_inset + + when possible, + instead of repeating the steps for traversal algorithms like Algorithm T. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +This algorithm threads an unthreaded tree +\begin_inset Formula $\mathtt{T}$ +\end_inset + +. + The fields +\begin_inset Formula $\mathtt{LTAG}$ +\end_inset + + and +\begin_inset Formula $\mathtt{RTAG}$ +\end_inset + + in the nodes of +\begin_inset Formula $\mathtt{T}$ +\end_inset + + are considered to initially contain arbitrary values that we do not need to preserve. +\end_layout + +\begin_layout Enumerate +[Initialize list head and variables.] Get +\begin_inset Formula $\mathtt{P}\Leftarrow\mathtt{AVAIL}$ +\end_inset + + and set +\begin_inset Formula $\mathtt{LTAG(P)}\gets\mathtt{RTAG(P)}\gets0$ +\end_inset + +, + +\begin_inset Formula $\mathtt{LLINK(P)}\gets\mathtt{T}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{RLINK(P)}\gets\mathtt{P}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{T}\gets\mathtt{P}$ +\end_inset + +, + and +\begin_inset Formula $\mathtt{Q}\gets\mathtt{P}\$$ +\end_inset + +. + +\emph on +(We'll use +\begin_inset Formula $\mathtt{Q}$ +\end_inset + + as a pointer to the node being considered and +\begin_inset Formula $\mathtt{P}$ +\end_inset + + and +\begin_inset Formula $\mathtt{R}$ +\end_inset + + as pointers to the next and previous nodes, + respectively. + We only ever compute the next node in inorder from the last node calculated this way, + which makes it trivial to use algorithm T as a coroutine.) +\end_layout + +\begin_layout Enumerate +\begin_inset CommandInset label +LatexCommand label +name "enu:23122b" + +\end_inset + +[Are we over?] If +\begin_inset Formula $\mathtt{RLINK(Q)}=\mathtt{Q}$ +\end_inset + +, + the algorithm terminates. + +\emph on +(This loop only happens in the list head.) +\end_layout + +\begin_layout Enumerate +[Step.] Set +\begin_inset Formula $\mathtt{R}\gets\mathtt{Q}\$$ +\end_inset + +. + If +\begin_inset Formula $\mathtt{LLINK(Q)}=\Lambda$ +\end_inset + +, + set +\begin_inset Formula $\mathtt{LTAG(Q)}\gets0$ +\end_inset + + and +\begin_inset Formula $\mathtt{LLINK(Q)}\gets\mathtt{P}$ +\end_inset + +, + otherwise set +\begin_inset Formula $\mathtt{LTAG(Q)}\gets1$ +\end_inset + +. + Similarly, + if +\begin_inset Formula $\mathtt{RLINK(Q)}=\Lambda$ +\end_inset + +, + set +\begin_inset Formula $\mathtt{RTAG(Q)}\gets0$ +\end_inset + + and +\begin_inset Formula $\mathtt{RLINK(Q)}\gets\mathtt{R}$ +\end_inset + +, + otherwise set +\begin_inset Formula $\mathtt{RTAG(Q)}\gets1$ +\end_inset + +. + Finally set +\begin_inset Formula $\mathtt{P}\gets\mathtt{Q}$ +\end_inset + +, + +\begin_inset Formula $\mathtt{Q}\gets\mathtt{R}$ +\end_inset + +, + and return to step +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:23122b" +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 +rexerc37[24] +\end_layout + +\end_inset + +(D. + Ferguson.) If two computer words are necessary to contain two link fields and an +\begin_inset Formula $\mathtt{INFO}$ +\end_inset + + field, + representation (2) requires +\begin_inset Formula $2n$ +\end_inset + + words of memory for a tree with +\begin_inset Formula $n$ +\end_inset + + nodes. + Design a representation scheme for binary trees that uses less space, + assuming that +\emph on +one +\emph default + link and an +\begin_inset Formula $\mathtt{INFO}$ +\end_inset + + field will fit in a single computer word. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +If we allow for a second null value (call it +\begin_inset Formula $\lambda$ +\end_inset + +, + which could be e.g. + a pointer to a specific word in the program code or to a sentinel constant, + or 4001 in MIX, + or 1 in MMIX), + then we could implement the solution in the book, + which is that, + if +\begin_inset Formula $\mathtt{LINK(P)}=\Lambda$ +\end_inset + +, + then +\begin_inset Formula $\mathtt{LLINK(P)}=\mathtt{RLINK(P)}=\Lambda$ +\end_inset + +, + and otherwise +\begin_inset Formula $\mathtt{LLINK(P)}=\mathtt{LINK(P)}$ +\end_inset + + and +\begin_inset Formula $\mathtt{RLINK(P)}=\mathtt{LINK(P)}+1$ +\end_inset + + (or +\begin_inset Formula $+\mathtt{sizeof(int)}$ +\end_inset + +), + except that if +\begin_inset Formula $\mathtt{LINK(LINK(P))}=\lambda$ +\end_inset + + or +\begin_inset Formula $\mathtt{LINK(LINK(P)}+1\mathtt{)}=\lambda$ +\end_inset + + then +\begin_inset Formula $\mathtt{LLINK(P)}$ +\end_inset + + or +\begin_inset Formula $\mathtt{RLINK(P)}$ +\end_inset + + is respectively +\begin_inset Formula $\Lambda$ +\end_inset + +. +\end_layout + +\end_body +\end_document |
