Transcript Module 2
Module 2: Fundamental Concepts
• Problems
• Programs
– Programming languages
1
Problems
We view solving problems as the
main application for computer
programs
2
Definition
• A problem is a mapping or function between
a set of inputs and a set of outputs
• Example Problem: Sorting
(4,2,3,1)
(3,1,2,4)
(7,5,1)
(1,2,3)
Inputs
(1,2,3,4)
(1,5,7)
(1,2,3)
Outputs
3
How to specify a problem
• Input
– Describe what an input instance looks like
• Output
– Describe what task should be performed on the
input
– In particular, describe what output should be
produced
4
Example Problem Specifications*
– Sorting problem
• Input
– Integers n1, n2, ..., nk
• Output
– n1, n2, ..., nk in nondecreasing order
– Find element problem
• Input
– Integers n1, n2, …, nk
– Search key S
• Output
– yes if S is in n1, n2, …, nk, no otherwise
5
Programs
Programs solve problems
6
Purpose
• Why do we write programs?
• One answer
– To solve problems
– What does it mean to solve a problem?
• Informal answer: For every legal input, a correct
output is produced.
• Formal answer: To be given later
7
Programming Language
• Definition
– A programming language defines what
constitutes a legal program
– Example: a pseudocode program may not be a
legal C++ program which may not be a legal C
program
– A programming language is typically referred to
as a “computational model” in a course like this.
8
C++
• Our programming language will be C++
with minor modifications
– Main procedure will use input parameters in a
fashion similar to other procedures
• no argc/argv
– Output will be returned
• type specified by main function type
9
Maximum Element Problem
• Input
– integer n >= 1
– List of n integers
• Output
– The largest of the n integers
10
C++ Program which solves the
Maximum Element Problem*
int main(int A[], int n) {
int i, max;
if (n < 1)
return (“Illegal Input”);
max = A[0];
for (i = 1; i < n; i++)
if (A[i] > max)
max = A[i];
return (max);
}
11
Fundamental Theme
Exploring capabilities and limitations
of C++ programs
12
Restating the Fundamental
Theme
• We will study the capabilities and limits of
C++ programs
• Specifically, we will try and identify
– What problems can be solved by C++ programs
– What problems cannot be solved by C++
programs
13
Studying the Theme
• How do we prove a problem CAN be solved
by SOME C++ program?
– We write a specific C++ program which solves
it.
• How do we prove something CANNOT be
solved by ANY C++ program?
– We have to develop an argument which takes
into account EVERY C++ program that could
be written.
14
Question
• Is C++ general enough?
• Or is it possible that there exists some
problem P such that
– P can be solved by some program P in some
other reasonable programming language
– but P cannot be solved by any C++ program?
15
Church’s Thesis (modified)
• We have no proof of an answer, but it is
commonly accepted that the answer is no.
• Church’s Thesis (three identical statements)
– C++ is a general model of computation
– Any algorithm can be expressed as a C++
program
– If some algorithm cannot be expressed by a
C++ program, it cannot be expressed in any
reasonable programming language
16
Summary *
• Problems
– When we talk about what programs can or
cannot “DO”, we mean what PROBLEMS can
or cannot be solved
• Questions
– For any problem, can there be more than one
program which solves it?
– For any program, can it solve more than one
problem?
– Which is harder: proving a problem solvable or
unsolvable?
17