Transcript slides01

Welcome!
Program Design and Analysis II for Engineers
CompSci 100E
Soc Psy 126
W, F 2:50-4:05
Professor Jeff Forbes
http://www.cs.duke.edu/courses/spring11/cps100e/forbes
http://www.cs.duke.edu/forbes
CompSci 100e
1.1
Computer Science in a Nutshell?
CompSci 100e
1.2
Computer Science in a Nutshell?
CompSci 100e
1.3
Computer Science in a Nutshell?
CompSci 100e
1.4
Computer Science in a Nutshell?

What is Computer Science?

What are some of the subfields of CS?

What does a Computer Scientist do? Lots of scientists and
engineers

What does a programmer do?
CompSci 100e
1.5
What is Computer Science?
What is it that distinguishes it from the
separate subjects with which it is related?
What is the linking thread which gathers these
disparate branches into a single discipline?
My answer to these questions is simple --- it is
the art of programming a computer. It is the art
of designing efficient and elegant methods of
getting a computer to solve problems,
theoretical or practical, small or large, simple
or complex.
C.A.R. (Tony) Hoare
CompSci 100e
1.6
Programming != Computer Science

What is the nature of intelligence? How can one predict the
performance of a complex system? What is the nature of
human cognition? Does the natural world 'compute'?

It is the interplay between such fundamental challenges and
the human condition that makes computer science so
interesting. The results from even the most esoteric computer
science research programs often have widespread practical
impact. Computer security depends upon the innovations in
mathematics. Your Google search for a friend depends on
state-of-the-art distributed computing systems, algorithms,
and artificial intelligence.
http://www.post-gazette.com/pg/pp/04186/341012.stm
CompSci 100e
1.7
Course Overview

Active Lectures, Labs, Quizzes, Programs
 Labs based on questions given out in previous week
• Hands-on practice with programming
• Discuss answers, answer new questions
• More opportunities for questions to be answered.

Active Lectures based on readings, questions, programs
• In-class questions used to ensure understanding

Programs
• Theory and practice of data structures and OO programming
• Fun, practical, tiring, …

Exams/Tests
 Semester: open book/note*
 Final: open book/note
CompSci 100e
1.8
Is this course for you?



You should already know…
 Basics of programming: variables, conditionals, loops,
arrays/lists/vectors
 Prereq: CompSci 6, EGR 53, AP CS, Programming
experience, or ambition, …
Don’t need to know
 Java, but some already do
This course introduces
 Java & Object Oriented Programming
 Data structures and abstraction
 Algorithm design and analysis
 The awesome ability to write programs to solve your
problems and amaze your peers
CompSci 100e
1.9
What’s this course really about?

Solving problems






Understanding problem statements
Designing solutions to the problems
Implementing the problem solution in a program
Understanding and testing the results
Documenting and presenting our results
How will we do it?
 Written classwork and homework
 Programming projects
 Algorithmic Programming Testing
CompSci 100e
1.10
Tradeoffs
Programming, design,
algorithmic, datastructural
Simple, elegant, quick,
efficient: what are our
goals in programming?
Don’t worry about getting
it right the first time.
Fast programs, small
programs,.
How do we decide what
tradeoffs are important?
Tension between
generality, simplicity,
elegance, …
Runtime, space, your
time, CPU time…
Time vs. space
CompSci 100e
1.11
Duke Contributions
CompSci 100e
1.12
Story
Anyway, I thought you'd be interested to know that in 2 of the 5
technical interviews I had, I recognized problems from CS courses
at Duke. Specifically, they asked me to write algorithms for the
"intersection of two sets" problem and a variation of the "boggle"
problem. I thought that was pretty interesting. … For what it's
worth for any of your students interviewing, I prepared for the
interview mostly by practicing APT problems from the Duke CS100
course page, and I felt that that prepared me very well for about
80% of the questions that were asked. It certainly helped me get
into the mindset of the types of things they ask, especially after a
few years of being away from those types of algorithms.
- Duke CS ‘07 alum
CompSci 100e
1.13
Languages
Instead of imagining that our main task is to instruct a computer
what to do, let us concentrate rather on explaining to human
beings what we want a computer to do. - Donald Knuth
Pictures


Machine languages.
Natural languages.
Kids Make Nutritious Snacks.
Natural language (English)
More
easily
expressed

Red Tape Holds Up New Bridge.

Police Squad Helps Dog Bite Victim.

Local High School Dropouts Cut in Half.

[ real newspaper headlines, compiled by Rich Pattis ]

Pseudo-code
More
precise
Specific high-level
programming language
Machine Language
High-level programming languages.
CompSci 100e
© Sedgewick & Wayne
1.14
Why Java?

Java features.
 Widely used.
 Widely available.
 Embraces full set of modern abstractions.
 Variety of automatic checks for mistakes in programs.

Java economy.
 Mars rover.
 Cell phones.
 Blu-ray Discs.
 Web servers.
 Medical devices.
 Supercomputing.
 …
CompSci 100e
James Gosling
http://java.net/jag
© Sedgewick & Wayne
1.15
Why Java?

Java features.
 Widely used.
 Widely available.
 Embraces full set of modern abstractions.
 Variety of automatic checks for mistakes in programs.
 Buzzword-enabled
“Java is a simple, object-oriented, distributed, interpreted,
robust, secure, architecture-neutral, portable, high
performance, multi-threaded, and dynamic language”

Caveat. No perfect language.

Our approach.
 Minimal subset of Java.
 Develop general programming skills that are applicable to:
C, C++, C#, Perl, Python, Ruby, Matlab, Fortran, Fortress, …
CompSci 100e
1.16
Programming in Java
Programming

in Java.
Create the program by typing it into a text editor, and
save it as HelloWorld.java
/*******************************************
* Prints "Hello, World"
* Everyone's first Java program.
*******************************************/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
HelloWorld.java
CompSci 100e
© Sedgewick & Wayne
1.17
Programming in Java
Programming


in Java.
Create the program by typing it into a text editor, and
save it as HelloWorld.java
Compile it using Eclipse or by typing at the command-line:
javac HelloWorld.java
command-line
% javac HelloWorld.java
(or click the Save button in Eclipse)

This creates a Java bytecode file named: HelloWorld.class
CompSci 100e
© Sedgewick & Wayne
1.18
Java Bytecode
0000000
0000020
0000040
0000060
0000100
0000120
0000140
0000160
0000200
0000220
0000240
0000260
0000300
0000320
0000340
0000360
0000400
0000420
0000440
0000460
0000500
0000520
0000540
0000560
0000600
0000620
0000640
0000652
CompSci 100e
312
\0
\0
V
u
n
/
r
o
027
W
H
a
j
001
o
023
r
025
i
\0
\0
001
013
\0
\0
\0
HelloWorld.class
376 272 276 \0 \0 \0
. \0 035
020 \0 021 \b \0 022 \n \0 023
026 001 \0 006
<
i
n
i
t
001 \0 004
C
o
d
e 001 \0
m
b
e
r
T
a
b
l
e
001 \0 026
(
[
L
j
a
v
S
t
r
i
n
g
;
)
V
c
e
F
i
l
e 001 \0 017
r
l
d
.
j
a
v
a \f
\f \0 030 \0 031 001 \0 \f
H
o
r
l
d 007 \0 032 \f \0
e
l
l
o
W
o
r
l
d
/
l
a
n
g
/
O
b
j
a
v
a
/
l
a
n
g
/
\0 003
o
u
t 001 \0 025
L
/
P
r
i
n
t
S
t
r
j
a
v
a
/
i
o
/
P
e
a
m 001 \0 007
p
r
i
(
L
j
a
v
a
/
l
a
n
g
;
)
V \0
! \0 005
002 \0 001 \0 007 \0 \b \0 001
001 \0 001 \0 \0 \0 005
* 267
\0 \n \0 \0 \0 006 \0 001 \0
\0 \f \0 001 \0 \t \0 \0 \0
\0 \t 262 \0 002 022 003 266 \0
\n \0 \0 \0 \n \0 002 \0 \0
001 \0 \r \0 \0 \0 002 \0 016
\n
\0
>
017
001
a
001
H
\0
e
033
001
e
S
j
e
r
n
n
\0
\0
\0
\0
%
004
\0
© Sedgewick & Wayne
\0
024
001
L
\0
/
\0
e
007
l
\0
\0
c
y
a
a
i
t
g
006
\t
001
\0
\0
261
017
006 \0 017 \t
007 \0 025 007
\0 003
(
)
i
n
e
N
004
m
a
i
l
a
n
g
\n
S
o
u
l
l
o
W
\0 \b 007 \0
l
o
,
034 001 \0 \n
020
j
a
v
t 001 \0 020
s
t
e
m
v
a
/
i
m
; 001 \0
n
t
S
t
l
n 001 \0
/
S
t
r
\0 \0 \0 \0
\0 \0 \0 035
261 \0 \0 \0
\f \0 \t \0
002 \0 001 \0
\0 \0 \0 001
\0 \b \0 020
1.19
A Rich Subset of the Java Language
Built-In Types
System
Math Library
int
double
System.out.println()
Math.sin()
Math.cos()
long
String
System.out.print()
Math.log()
Math.exp()
char
boolean
System.out.printf()
Math.sqrt()
Math.pow()
Math.min()
Math.max()
Math.abs()
Math.PI
Flow Control
Parsing
if
else
Integer.parseInt()
for
while
Double.parseDouble()
Boolean
Punctuation
Primitive Numeric Types
+
-
*
/
%
++
true
false
{
}
--
>
<
||
&&
(
)
<=
>=
==
,
;
!=
!
String
Arrays
Objects
+
""
a[i]
class
static
length()
compareTo()
new
public
private
charAt()
matches()
a.length
toString()
equals()
new
main()
CompSci 100e
© Sedgewick & Wayne
1.20
Problem Solving and Programming

How many words are in a file?



What’s a word?
What’s a file?
How do we solve this: simply, quickly, …?
• What’s the best we can do? Constraints?

How many different/unique words are in a file?


How many words do two files have in common?


How is this related to previous task?
Spell-checking, stemming, Did you mean ..?
How many codons does DNA have in common?
CompSci 100e
1.21
Problem 1: Text Clouds

Text clouds: A simple yet powerful idea
 Visualization of most frequently occurring words within some
body of text

Great visual/statistic: http://chir.ag/phernalia/preztags/

http://www.nytimes.com/gst/mostsearched.html?period=30&for
mat=tagcloud
• What information is stored in the URL of the NYTimes site above?


Color or font size indicates word frequency
What is involved with generating text clouds?
 Steps? Issues?
 See SimpleWordCount.java and SimpleCloudMaker.java
CompSci 100e
1.22
Problem 2: Data processing

Scan a large (~ 107 bytes) file
Print the words together with counts of how often they occur
Need more specification?

How do you do it?

What is we only wanted the top k (say 20) words?


CompSci 100e
1.23
Possible solutions
1.
2.
3.
•
Use heavy duty data structures (Knuth)
 Hash tries implementation
 Randomized placement
 Lots o’ pointers
 Several pages
UNIX shell script (Doug Mclroy)
tr -cs “[:alpha:]” “[\n*]” < FILE | \
sort | \
uniq -c | \
sort -n -r -k 1,1
See SimpleWordCount.java
Which is better?
 K.I.S.?
CompSci 100e
1.24