It is often difficult to draw precise boundaries between
disciplines, and it is even harder when it comes to mathematics and
computer science: Is computer science a branch of mathematics?
Is algorithmics, the central part of computer science merely a branch
of mathematics? Is mathematics perhaps a branch of computer science?
We will not go into these issues, which have
been thoroughly discussed by Knuth in [K1], for example. We
will only mention that valid arguments can be made for either
propositions. However, and despite what has been just said,
artificial boundary lines are drawn between these two disciplines
in school and university mathematics or computer science study
programs. We want to try to remove these artificial boundary
lines, and demonstrate how algorithmic thinking and mathematical
thinking can be integrated either in the mathematics curriculum or
in the computer science curriculum.
Algorithmic thinking and mathematical thinking have been discussed by mathematicians
and computer scientists such as Knuth, Maurer and Ralston [K2,M,MR].
Knuth for example, sums up the common features shared
by algorithmic thinking and mathematical thinking in a table. These include
formula manipulation, representation of reality, reduction to simpler
problems, abstract reasoning, information structures and detailed
descriptions of algorithms. He also points out that
while mathematical thinking deals
with infinity - and algorithmic thinking does not - it ignores completely issues
such as computational ``cost", which is always one of the concerns
of algorithmic thinking.
Algorithmic thinking encourages learners to construct a solution,
prove its correctness, and analyze its complexity. This contributes
to the understanding of problem solving, and therefore has
pedagogical value, as emphasized by Knuth in [K1]: ``...
a person does not really understand
something until he teaches it to someone else. Actually a person
does not really understand something until
he can teach it to a computer, i.e. express it as an
algorithm." This is something most of us have experienced, and it
definitely strengthens the feeling that the cultivation of algorithmic
thinking must be a central component of mathematical education. More
about the the different modes of thinking can also be found in [GZ].
In this paper we try to show that algorithmic
thinking and mathematical thinking complement
each other, and that an integrated
mathematical-algorithmic approach can be taken
when teaching and learning a subject.
We chose an example - a case study - that fits into the
mathematics curriculum as well as into the computer science curriculum.
We introduce an abstract definition of a set,
discuss the structure of the set, and present an algorithm for its
construction, leading to questions of the kind:
Is the algorithm correct? Can its correctness be proven mathematically?
What is the mathematical generalization of the problem?
We touch upon concepts such as algorithmic problems, decision
problems, and other important and profound concepts like data
structures, recursion, complexity of algorithms, and more.
However, we must make one point here: This paper is not supposed to be a
study unit. This means that we present briefly fundamental
mathematical and computer science concepts. We raise questions,
and we lead to other questions, but, we don't necessarily give all
the details of the solutions, nor the exact flow of the study.
But, we try to provide some guidelines for the
professionals who will write the study unit, and for the teachers who
will teach this subject. In this paper we attempt to be clear and
fluent at the expense of filling in all the details.