COT 3100 -- Discrete Structures: § 1: Introductory Material

Instructor: M.S. Schmalz


Computer science is based on discrete mathematics, a relatively new branch of mathematics. Discrete math emphasizes sets, and operations over sets that are (or can be expressed in terms of) a subset of the integers.

A key feature of modern computer science is the ability to specify the functionality of computer programs in terms of mathematical expressions. In order to exploit discrete mathematics, the computer science student needs to learn how to read, understand, and manipulate notation. In practice, such notation describes operands, operations, algorithms, and analysis techniques specific to computer related applications.

This section is organized as follows:

We begin with an overview of background and foundational material. To establish proficiency, we will concentrate initially on learning concepts and notation about logic, especially Boolean logic, or operations over binary numbers (ones and zeroes). We then progress to more general considerations of sets, operations over sets, maps, and functions. We further generalize this information to include algorithms and analysis of the computational complexity of algorithms. Finally, we specialize our knowledge of number systems and functions to discuss integers, modular arithmetic, matrices, and selected topics from number theory.

1.1. Introduction and Overview

In order to set the proper context for this class, which is concerned with high-level techniques that facilitate good algorithm and software design, we begin with a discussion of software design and engineering principles.

1.1.1. Software Design & Engineering Goals

Software design can be divided into two levels. High-level software design and analysis seeks to produce correct, efficient software. At a low level, one is more concerned with robustness, adaptability, and reusability.

1.1.1.1. High-level Software Design Goals include:

1.1.1.2. Low-level Software Design Goals include: The above-listed low-level goals are also covered in the CISE Department's class entitled Data Structures and Algorithms (COP3530). In this class, we will concern ourselves with the use of high-level (mathematical) notation and techniques to describe the functionality and analysis of algorithms, procedures, functions, and operations that are typically encountered in digital computing.

Class #01: Wednesday 06 Jan 1999

1.1.2. Understanding Discrete Math

To meet the above-listed high-level goals, one must understand and be able to manipulate expressions that contain operations and operands. In most cases, such expressions are published in research and development papers and reports as pseudocode, which evolved from mathematical notation as computer science developed since the 1940s.

Expressions include the following components:

  1. Operands that are typically expressed in terms of sets, which are collections of elements.

  2. Operations that modify or combine set elements in different ways, to produce a result that is typically input to one or more additional operation.

  3. Quantifiers that tell the reader of a given expression how the expression applies to its operands.

1.1.3. Mathematical Foundations

Discrete math is based upon the following subdisciplines of mathematics:

In each of the episodes of discovery and learning that we embark upon in this class, we will be emphasizing primarily manipulation of operations in support of the instance of formal logic called Boolean logic.

1.1.4. Additional Concepts

Discrete math is also based upon two concepts derived from sampling theory, namely:

1.2. Basic Concepts of Logic

We begin our summary exposition of discrete mathematics with a discussion of Boolean numbers.

1.2.1. Boolean Number System and Boolean Operations.

In order to manipulate Boolean numbers in a useful way, we need to define some operations over B. Exercises.

Class #02: Friday 08 Jan 1999

1.2.2. Elements of Logical Discourse.

We next continue with the concepts of propositions (Section 1.2.2.1), implications (Section 1.2.2.2), and rules for manipulating logical statements (Section 1.2.2.3).

1.2.2.1. Propositions are important concepts in the formulation of precise, concise logical discourse (a collection of statements that are grounded in formal logic).

1.2.2.2. Logical Implications are represented by constructs such as the if...then... construct in the sentence If today is Tuesday, then it must be raining.

We next discuss the concept of propositional equivalence, in the definition of which the biconditional implication is employed, as shown in red typeface below.

1.2.2.3. Rules for Manipulating Logical Statements are the "bread and butter" of applications such as theorem proving. Recall that the number of entries (rows) in a truth table varies as 2n, where n denotes the number of logical variables. (In the preceding example, there were two variables, p and q.) Proof by exhaustion (using complete truth tables) can become prohibitively costly for large expressions involving many variables. We remedy this situation with rules for manipulating logical statements, which we outline as follows, and which are stated in the text (Rosen, Discrete Mathematics and its Applications, 4th Edition) in Table 5 (page 17).

Exercises. Build truth tables for (a) distributive and (b) DeMorgan's Laws, listed above.

Class #03: Monday 11 Jan 1999

In the preceding lecture, we discussed logical operations on propositions, called implications and equivalences. In this lecture, we will explore the concepts of relations, predicates and quantifiers.

1.2.2.4. Relations and Predicates. Predicates are formed from relations, which associate two objects in a specific way.

1.2.2.5. Quantifiers. Another important class of mathematical objects is called quantifiers, of which there are two instances, namely, the universal and existential quantifiers.

Given these theoretical and manipulative tools, we are ready to address concepts of sets and mappings.

Class #04: Wednesday 13 Jan 1999

1.3. Sets, Set Operations, Mappings, and Functions

In the preceding classes, we touched upon concepts of sets, by talking about Boolean numbers B = {0,1}, the set contains zero and one. We also mentioned a universe of discourse that could be defined by quantifiers. In this class, we discuss in greater detail the concepts of sets and operations over sets.

1.3.1. Sets and Set Operations

The concept of a set is basic to mathematics, and is (as we shall see in the following discussion) an axiomatic concept in mathematics.

Now that we have established what a set is, let us define some ways of describing sets.

Given the preceding theoretical and visualization tools, we can now define some common set operations.

We next consider an application for set notation and representations such as the Venn diagram, namely, the specification of mappings.

Class #05: Friday 15 Jan 1999

1.3.2. Mappings

Mappings are of interest in mathematics since they provide a high-level formalism for describing operations, a special case of which are functions.

1.3.3. Functions

A special type of mapping that is employed in a wide variety of mathematical applications is called a function. This term has a precise mathematical meaning, as shown below.

1.3.3.1. Composition of Functions. It is often useful to combine functions to produce other functions. Chaining functions (say, f and g) together (as in f(g(x)) ) is an important strategy in many types of computations, including signal and image processing. This strategy is described mathematically in terms of composition of functions.

1.3.3.2. Inverse Functions. Another important concept in the study of mappings and functions is inverse functions, which are employed in the solution of equations.

Hint: You should be able to reproduce graphs of the ceiling and floor functions, and various compositions of those functions, on an exam.

Class #06: Monday 18 Jan 1999

1.3.3.4. Sequences and Summation. We have thus far examined notation and concepts that support sets, and operations over sets such as functions. In this class, we will examine the discrete structure called a sequence, and will define or analyze various operations over sequences. This will lead us into the topic of algorithms and complexity in Section 1.4 of these notes (Chapter 2 of the text), as well as prepare us for a discussion of number theory (Section 1.5 of these notes and Chapter 2 of the text).

1.3.3.5. Growth of Functions. In this section, we discuss some concepts of complexity, including Big-Oh notation. To prepare for our exposition of algorithmic complexity in the next class, you should read Sections 1.7 and 1.8 in the text (Rosen, Discrete Mathematics and its Applications, 4th Edition).

In the next class, we will discuss composition of big-Oh estimates, to determine an upper bound on the complexity of composite functions and algorithms.

Class #07: Wednesday 20 Jan 1999

1.4. Algorithms and Algorithmic Complexity

We begin by noting that this is not a class in Algorithms (such material is covered in COP3530, Algorithms and Data Structures). Instead, in this class, we use algorithms to introduce salient concepts and to concentrate on analysis of algorithm performance, especially computational complexity.

1.4.1. Big-Oh Notation and Associated Identities.

In Section 1.3.3.5, Big-Oh notation was defined. In this section, we present identities for Big-Oh notation that allow the computation of complexity estimates for composite functions, with examples.

1.4.2. Big-Omega and Big-Theta Notation.

Big-Oh notation establishes an upper bound on an algorithm's complexity, since | f(x) | C · | g(x) | , for x greater than some constant k, given constant C. (The less-than-or-equal sign denotes that Big-Oh describes an upper bound).

1.5. Integers, Matrices, and Number Theory


Copyright © 1998,1999 by Mark S. Schmalz
All rights reserved, except for viewing/printing by UF faculty or students registered for this class.