aboutsummaryrefslogtreecommitdiff
path: root/vol1/2.2.4.lyx
diff options
context:
space:
mode:
Diffstat (limited to 'vol1/2.2.4.lyx')
-rw-r--r--vol1/2.2.4.lyx644
1 files changed, 644 insertions, 0 deletions
diff --git a/vol1/2.2.4.lyx b/vol1/2.2.4.lyx
new file mode 100644
index 0000000..5445975
--- /dev/null
+++ b/vol1/2.2.4.lyx
@@ -0,0 +1,644 @@
+#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
+\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
+rexerc3[20]
+\end_layout
+
+\end_inset
+
+What does operation (3) do if
+\begin_inset Formula $\mathtt{PTR}_{1}$
+\end_inset
+
+ and
+\begin_inset Formula $\mathtt{PTR}_{2}$
+\end_inset
+
+ are both pointing to nodes in the
+\emph on
+same
+\emph default
+ circular list?
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+answer
+\end_layout
+
+\end_inset
+
+It splits the list into two parts;
+ the one that goes from the right of
+\begin_inset Formula $\mathtt{PTR}_{1}$
+\end_inset
+
+ to
+\begin_inset Formula $\mathtt{PTR}_{2}$
+\end_inset
+
+ is preserved but the other one becomes a memory leak.
+ If the two pointers are equal,
+ nothing happens,
+ just
+\begin_inset Formula $\mathtt{PTR}_{2}$
+\end_inset
+
+ is set to
+\begin_inset Formula $\Lambda$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+rexerc5[21]
+\end_layout
+
+\end_inset
+
+Design an algorithm that takes a circular list such as (1) and reverses the direction of all the arrows.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+answer
+\end_layout
+
+\end_inset
+
+This is similar to exercise 2.2.3.7.
+\end_layout
+
+\begin_layout Enumerate
+Set
+\begin_inset Formula $\mathtt{P}\gets\Lambda$
+\end_inset
+
+ and
+\begin_inset Formula $\mathtt{C}\gets\mathtt{PTR}$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Enumerate
+If
+\begin_inset Formula $\mathtt{C}\neq\Lambda$
+\end_inset
+
+,
+ set
+\begin_inset Formula $\mathtt{N}\gets\mathtt{LINK(C)}$
+\end_inset
+
+,
+
+\begin_inset Formula $\mathtt{LINK(C)}\gets\mathtt{P}$
+\end_inset
+
+,
+
+\begin_inset Formula $\mathtt{P}\gets\mathtt{C}$
+\end_inset
+
+,
+
+\begin_inset Formula $\mathtt{C}\gets\mathtt{N}$
+\end_inset
+
+,
+ and repeat.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+exerc7[10]
+\end_layout
+
+\end_inset
+
+Why is it useful to assume that the
+\family typewriter
+ABC
+\family default
+ fields of a polynomial list appear in decreasing order?
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+answer
+\end_layout
+
+\end_inset
+
+Many operations on polynomials require us to match monomials with equal exponents of the variables.
+ By having a total order on them it's easy to match these in linear time.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+rexerc8[10]
+\end_layout
+
+\end_inset
+
+Why is it useful to have
+\family typewriter
+Q1
+\family default
+ trailing one step behind
+\family typewriter
+Q
+\family default
+ in Algorithm A?
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+answer
+\end_layout
+
+\end_inset
+
+We need
+\family typewriter
+Q
+\family default
+ to advance in order to check if the next monomial has greater,
+ lower,
+ or equal coefficient than the one pointed to by
+\family typewriter
+P
+\family default
+,
+ and if it's lower,
+ we need
+\family typewriter
+Q1
+\family default
+ to insert the one pointed to by
+\family typewriter
+P
+\family default
+ right before the one pointed to by
+\family typewriter
+Q
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+rexerc9[23]
+\end_layout
+
+\end_inset
+
+Would Algorithm A work properly if
+\begin_inset Formula $\mathtt{P}=\mathtt{Q}$
+\end_inset
+
+ (i.e.,
+ both pointer variables point at the same polynomial)?
+ Would Algorithm M work properly if
+\begin_inset Formula $\mathtt{P}=\mathtt{M}$
+\end_inset
+
+,
+ if
+\begin_inset Formula $\mathtt{P}=\mathtt{Q}$
+\end_inset
+
+,
+ or if
+\begin_inset Formula $\mathtt{M}=\mathtt{Q}$
+\end_inset
+
+?
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+answer
+\end_layout
+
+\end_inset
+
+Algorithm A would work properly,
+ doubling the polynomial being pointed to (this is assuming no coefficient is 0).
+ As for Algorithm M,
+ it would work for
+\begin_inset Formula $\mathtt{P}=\mathtt{M}$
+\end_inset
+
+ since they're not mutated.
+ If
+\begin_inset Formula $\mathtt{P}=\mathtt{Q}$
+\end_inset
+
+ it wouldn't work,
+ because if
+\family typewriter
+M
+\family default
+ has more than one monomial then the addition of
+\begin_inset Formula $\mathtt{P}$
+\end_inset
+
+ times the second monomial or later (the second iteration of step M2) would add the wrong value to
+\family typewriter
+Q
+\family default
+.
+ If
+\begin_inset Formula $\mathtt{M}=\mathtt{Q}$
+\end_inset
+
+ it wouldn't work either as,
+ for example,
+ if initially
+\begin_inset Formula $\mathtt{M}=\mathtt{Q}=1$
+\end_inset
+
+ and
+\begin_inset Formula $\mathtt{P}=-1$
+\end_inset
+
+,
+ then addition in the first iteration of M2 would free the current monomial pointed to by
+\begin_inset Formula $\mathtt{M}$
+\end_inset
+
+ and in the next iteration of M1,
+
+\begin_inset Formula $\mathtt{M}$
+\end_inset
+
+ would point to free memory with unpredictable consequences.
+ In cases where the constant coefficient of
+\family typewriter
+P
+\family default
+ is not
+\begin_inset Formula $-1$
+\end_inset
+
+,
+ it amazingly works,
+ as writes to
+\family typewriter
+Q
+\family default
+ are always behind where we read from
+\family typewriter
+M
+\family default
+ when considering monomials of
+\family typewriter
+P
+\family default
+ with positive degree and,
+ for the constant coefficient,
+ it writes to the same position where
+\family typewriter
+M
+\family default
+ is but only to the
+\family typewriter
+COEF
+\family default
+ field—
+unless
+\family typewriter
+P
+\family default
+ is
+\begin_inset Formula $-1$
+\end_inset
+
+ in which case the node pointed to by
+\family typewriter
+M
+\family default
+ is freed.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+rexerc10[20]
+\end_layout
+
+\end_inset
+
+The algorithms in this section assume that we are using three variables
+\begin_inset Formula $x$
+\end_inset
+
+,
+
+\begin_inset Formula $y$
+\end_inset
+
+,
+ and
+\begin_inset Formula $z$
+\end_inset
+
+ in the polynomials,
+ and that their exponents individually never exceed
+\begin_inset Formula $b-1$
+\end_inset
+
+ (where
+\begin_inset Formula $b$
+\end_inset
+
+ is the byte size in
+\family typewriter
+MIX
+\family default
+'s case).
+ Suppose instead that we want to do addition and multiplication of polynomials in only one variable,
+
+\begin_inset Formula $x$
+\end_inset
+
+,
+ and to let its exponent take on values up to
+\begin_inset Formula $b^{3}-1$
+\end_inset
+
+.
+ What changes should be made to Algorithms A and M?
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+answer
+\end_layout
+
+\end_inset
+
+None,
+ as they work out of the box if we consider the
+\family typewriter
+ABC
+\family default
+ field to hold a single coefficient.
+ The sums and comparisons made on this field in the algorithms are equally valid independently of which of the two interpretations we want to give to this field,
+ assuming no overflow.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+rexerc17[22]
+\end_layout
+
+\end_inset
+
+What advantage is there in representing polynomials with a circular list as in this section,
+ instead of with a straight linear linked list terminated by
+\begin_inset Formula $\Lambda$
+\end_inset
+
+ as in the previous section?
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+answer
+\end_layout
+
+\end_inset
+
+Steps A2 and A5 don't need special cases to handle the end of a list,
+ only A3 does.
+ Other than that there's not much of a difference.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+rexerc18[25]
+\end_layout
+
+\end_inset
+
+Devise a way to represent circular lists inside a computer in such a way that the list can be traversed efficiently in both directions,
+ yet only one link field is used per node.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+answer
+\end_layout
+
+\end_inset
+
+If the link field combines the location of the next and previous fields with some monoidal operation like XOR,
+ and we have an item
+\begin_inset Formula $x_{i}$
+\end_inset
+
+,
+ then knowing the location of
+\begin_inset Formula $x_{i+1}$
+\end_inset
+
+ allows us to get the location of
+\begin_inset Formula $x_{i-1}$
+\end_inset
+
+ and vice versa,
+ so knowing the location of two consecutive items allows us to traverse the list in both directions.
+\end_layout
+
+\end_body
+\end_document