Cs223a Homework Chart

Courses offered by the Department of Computer Science are listed under the subject code CS on the Stanford Bulletin'sExploreCourses web site.

The Department of Computer Science (CS) operates and supports computing facilities for departmental education, research, and administration needs. All CS students have access to the departmental student machine for general use (mail, news, etc.), as well as computer labs with public workstations located in the Gates Building. In addition, most students have access to systems located in their research areas.

Each research group in Computer Science has systems specific to its research needs. These systems include workstations (PCs, Macs), multi-CPU computer clusters, and local mail and file servers. Servers and workstations running Linux or various versions of Windows are commonplace. Support for course work and instruction is provided on systems available through University IT (UIT) and the School of Engineering (SoE).

Mission of the Undergraduate Program in Computer Science

The mission of the undergraduate program in Computer Science is to develop students' breadth of knowledge across the subject areas of computer science, including their ability to apply the defining processes of computer science theory, abstraction, design, and implementation to solve problems in the discipline. Students take a set of core courses. After learning the essential programming techniques and the mathematical foundations of computer science, students take courses in areas such as programming techniques, automata and complexity theory, systems programming, computer architecture, analysis of algorithms, artificial intelligence, and applications. The program prepares students for careers in government, law, and the corporate sector, and for graduate study.

Learning Outcomes (Undergraduate)

The department expects undergraduate majors in the program to be able to demonstrate the following learning outcomes. These learning outcomes are used in evaluating students and the department's undergraduate program. Students are expected to be able to:

  1. Apply the knowledge of mathematics, science, and engineering.
  2. Design and conduct experiments, as well to analyze and interpret data.
  3. Design a system, component, or process to meet desired needs within realistic constraints such as economic, environmental, social, political, ethical, health and safety, manufacturability, and sustainability.
  4. Function on multidisciplinary teams.
  5. Identify, formulate, and solve engineering problems.
  6. Understand professional and ethical responsibility.
  7. Communicate effectively.
  8. Understand the impact of engineering solutions in a global, economic, environmental, and societal context.
  9. Demonstrate a working knowledge of contemporary issues.
  10. Apply the techniques, skills, and modern engineering tools necessary for engineering practice.
  11. Transition from engineering concepts and theory to real engineering applications.

Learning Outcomes (Graduate)

The purpose of the master’s program is to provide students with the knowledge and skills necessary for a professional career or doctoral studies. This is done through course work in the foundational elements of the field and in at least one graduate specialization. Areas of specialization include artificial intelligence, biocomputation, computer and network security, human-computer interaction, information management and analytics, mobile and internet computing, real-world computing, software theory, systems, and theoretical computer science.

The Ph.D. is conferred upon candidates who have demonstrated substantial scholarship and the ability to conduct independent research. Through course work and guided research, the program prepares students to make original contributions in Computer Science and related fields.

Graduate Programs in Computer Science

The University’s basic requirements for the M.S. and Ph.D. degrees are discussed in the "Graduate Degrees" section of this bulletin.

Computer Science Course Catalog Numbering System

The first digit of a CS course number indicates its general level of sophistication:

DigitDescription
001-099Service courses for nontechnical majors
100-199Other service courses, basic undergraduate
200-299Advanced undergraduate/beginning graduate
300-399Advanced graduate
400-499Experimental
500-599Graduate seminars

The tens digit indicates the area of Computer Science it addresses:

DigitDescription
00-09Introductory, miscellaneous
10-19Hardware and Software Systems
20-39Artificial Intelligence
40-49Software Systems
50-59Mathematical Foundations of Computing
60-69Analysis of Algorithms
70-79Computational Biology and Interdisciplinary Topics
90-99Independent Study and Practicum

Bachelor of Science in Computer Science

The department offers both a major in Computer Science and a minor in Computer Science. Further information is available in the Handbook for Undergraduate Engineering Programs published by the School of Engineering. The Computer Science major offers a number of tracks (programs of study) from which students can choose, allowing them to focus their program on the areas of most interest. These tracks also reflect the broad diversity of areas in computing disciplines. The department has an honors program.

In addition to Computer Science itself, Stanford offers several interdisciplinary degrees with a substantial computer science component. The Symbolic Systems major (in the School of Humanities and Sciences) offers an opportunity to explore computer science and its relation to linguistics, philosophy, and psychology. The Mathematical and Computational Sciences major (also Humanities and Sciences) allows students to explore computer science along with more mathematics, statistics, and operations research. 

Computer Science (CS)

Completion of the undergraduate program in Computer Science leads to the conferral of the Bachelor of Science in Computer Science.

Mission of the Undergraduate Program in Computer Science

The mission of the undergraduate program in Computer Science is to develop students' breadth of knowledge across the subject areas of computer science, including their ability to apply the defining processes of computer science theory, abstraction, design, and implementation to solve problems in the discipline. Students take a set of core courses. After learning the essential programming techniques and the mathematical foundations of computer science, students take courses in areas such as programming techniques, automata and complexity theory, systems programming, computer architecture, analysis of algorithms, artificial intelligence, and applications. The program prepares students for careers in government, law, the corporate sector, and for graduate study.

Requirements

Mathematics (26 units minimum)
CS 103Mathematical Foundations of Computing5
CS 109Introduction to Probability for Computer Scientists5
MATH 19Calculus 13
MATH 20Calculus 13
MATH 21Calculus 14
2
Science (11 units minimum)
Technology in Society (3-5 units)
Engineering Fundamentals (13 units minimum; see Basic Requirement 3 in the School of Engineering section)
Writing in the Major

CS 181W

Computers, Ethics, and Public Policy

CS 191W

Writing Intensive Senior Project

CS 194W

Software Project

CS 210B

Software Project Experience with Corporate Partners

CS 294W

Writing Intensive Research Project in Computer Science
Computer Science Core
CS 107Computer Organization and Systems5
or CS 107E Computer Systems from the Ground Up
CS 110Principles of Computer Systems5
CS 161Design and Analysis of Algorithms5
Senior Project (3 units)

CS 191

Senior Project

CS 191W

Writing Intensive Senior Project

CS 194

Software Project

CS 194H

User Interface Design Project

CS 194W

Software Project

CS 210B

Software Project Experience with Corporate Partners

CS 294

6

or CS 294W

Writing Intensive Research Project in Computer Science

Computer Science Depth B.S.

Choose one of the following ten CS degree tracks (a track must consist of at least 25 units and 7 classes):

Artificial Intelligence Track

Units
CS 221Artificial Intelligence: Principles and Techniques4

CS 228

Probabilistic Graphical Models: Principles and Techniques

CS 229

Machine Learning

CS 234

Reinforcement Learning

CS 238

Decision Making under Uncertainty

CS 124

From Languages to Information

CS 224N

Natural Language Processing with Deep Learning

CS 224S

Spoken Language Processing

CS 224U

Natural Language Understanding

CS 131

Computer Vision: Foundations and Applications

CS 231A

Computer Vision: From 3D Reconstruction to Recognition

CS 231N

Convolutional Neural Networks for Visual Recognition

CS 223A

Introduction to Robotics

CS 157

Logic and Automated Reasoning

CS 205A

Mathematical Methods for Robotics, Vision, and Graphics

STATS 315A

Modern Applied Statistics: Learning

STATS 315B

Modern Applied Statistics: Data Mining

CS 231B

CS 231M

CS 331A

CS 262

CS 279

Computational Biology: Structure and Organization of Biomolecules and Cells

CS 371

Computational Biology in Four Dimensions

CS 374

CS 276

Information Retrieval and Web Search

CS 224W

Analysis of Networks

CS 227B

General Game Playing

CS 277

CS 379

Interdisciplinary Topics

CS 327A

Advanced Robotic Manipulation

CS 329

Topics in Artificial Intelligence (with advisor approval)

ENGR 205

Introduction to Control Design Techniques

EE 209

MS&E 251

Introduction to Stochastic Control with Applications

MS&E 351

Dynamic Programming and Stochastic Control
4

CS 238

Decision Making under Uncertainty

CS 275

Translational Bioinformatics

CS 326

Topics in Advanced Robotic Manipulation

CS 334A

Convex Optimization I

or EE 364A

Convex Optimization I

CS 428

Computation and cognition: the probabilistic approach

EE 278

Introduction to Statistical Signal Processing

EE 364B

Convex Optimization II

ECON 286

Game Theory and Economic Applications

MS&E 252

Decision Analysis I: Foundations of Decision Analysis

MS&E 352

Decision Analysis II: Professional Decision Analysis

MS&E 355

Influence Diagrams and Probabilistics Networks

PHIL 152

Computability and Logic

PSYCH 202

Cognitive Neuroscience

PSYCH 204A

Human Neuroimaging Methods

PSYCH 204B

Computational Neuroimaging: Methods & Analyses

PSYCH 209

Neural Network Models of Cognition: Principles and Applications

STATS 200

Introduction to Statistical Inference

STATS 202

Data Mining and Analysis

STATS 205

Introduction to Nonparametric Statistics

Biocomputation Track

Units
3-4

CS 221

Artificial Intelligence: Principles and Techniques

CS 228

Probabilistic Graphical Models: Principles and Techniques

CS 229

Machine Learning

CS 231A

Computer Vision: From 3D Reconstruction to Recognition

CS 262

CS 270

Modeling Biomedical Systems: Ontology, Terminology, Problem Solving

CS 273A

The Human Genome Source Code

CS 274

Representations and Algorithms for Computational Molecular Biology

CS 275

Translational Bioinformatics

CS 279

Computational Biology: Structure and Organization of Biomolecules and Cells
3-4

CS 124

From Languages to Information

CS 145

Introduction to Databases

CS 147

Introduction to Human-Computer Interaction Design

CS 148

Introduction to Computer Graphics and Imaging

CS 248

Interactive Computer Graphics
3-4
CS 108Object-Oriented Systems Design3-4
CS 124From Languages to Information3-4
CS 131Computer Vision: Foundations and Applications3-4
CS 140Operating Systems and Systems Programming3-4
or CS 140E Operating systems design and implementation
CS 142Web Applications3
CS 143Compilers3-4
CS 144Introduction to Computer Networking3-4
CS 145Introduction to Databases3-4
CS 147Introduction to Human-Computer Interaction Design3-5
CS 148Introduction to Computer Graphics and Imaging3-4
CS 149Parallel Computing3-4
CS 154Introduction to Automata and Complexity Theory3-4
CS 155Computer and Network Security3
CS 157Logic and Automated Reasoning3
or PHIL 151 Metalogic
CS 164
CS 166Data Structures3-4
CS 167
CS 168The Modern Algorithmic Toolbox3-4
CS 190Software Design Studio3
CS 205AMathematical Methods for Robotics, Vision, and Graphics3
CS 205BMathematical Methods for Fluids, Solids, and Interfaces3
CS 210ASoftware Project Experience with Corporate Partners3-4
CS 221Artificial Intelligence: Principles and Techniques3-4
CS 223AIntroduction to Robotics3
CS 224NNatural Language Processing with Deep Learning3-4
CS 224SSpoken Language Processing2-4
CS 224UNatural Language Understanding3-4
CS 224WAnalysis of Networks3-4
CS 225AExperimental Robotics3
CS 227BGeneral Game Playing3
CS 228Probabilistic Graphical Models: Principles and Techniques3-4
CS 229Machine Learning3-4
CS 229TStatistical Learning Theory3
CS 231AComputer Vision: From 3D Reconstruction to Recognition3-4
CS 231B
CS 231M
CS 231NConvolutional Neural Networks for Visual Recognition3-4
CS 232Digital Image Processing3
CS 233Geometric and Topological Data Analysis3
CS 234Reinforcement Learning3
CS 238Decision Making under Uncertainty3-4
CS 240Advanced Topics in Operating Systems3
CS 240H
CS 242Programming Languages3
CS 243Program Analysis and Optimizations3-4
CS 244Advanced Topics in Networking3-4
CS 244BDistributed Systems3
CS 245Database Systems Principles3
CS 246Mining Massive Data Sets3-4
CS 247Human-Computer Interaction Design Studio3-4
CS 248Interactive Computer Graphics3-4
CS 249A
CS 251Bitcoin and Crypto Currencies3
CS 254Computational Complexity3
CS 255Introduction to Cryptography3
CS 261Optimization and Algorithmic Paradigms3
CS 262
CS 263Algorithms for Modern Data Models3
CS 264Beyond Worst-Case Analysis3
CS 265Randomized Algorithms and Probabilistic Analysis3
CS 266
CS 267Graph Algorithms3
CS 269IIncentives in Computer Science3
CS 270Modeling Biomedical Systems: Ontology, Terminology, Problem Solving3
CS 272Introduction to Biomedical Informatics Research Methodology3-5
CS 273AThe Human Genome Source Code3
CS 273BDeep Learning in Genomics and Biomedicine3
CS 274Representations and Algorithms for Computational Molecular Biology3-4
CS 275Translational Bioinformatics4
CS 276Information Retrieval and Web Search3
CS 279Computational Biology: Structure and Organization of Biomolecules and Cells3
CS 348BComputer Graphics: Image Synthesis Techniques3-4
CS 348CComputer Graphics: Animation and Simulation3
CS 371Computational Biology in Four Dimensions3
CS 374
CME 108Introduction to Scientific Computing3
EE 180Digital Systems Architecture4
EE 263Introduction to Linear Dynamical Systems3
EE 282Computer Systems Architecture3
EE 364AConvex Optimization I3
BIOE 101Systems Biology3
MS&E 152Introduction to Decision Analysis3-4
MS&E 252Decision Analysis I: Foundations of Decision Analysis3-4
STATS 206Applied Multivariate Analysis3
STATS 315AModern Applied Statistics: Learning2-3
STATS 315BModern Applied Statistics: Data Mining2-3
BMI 231
BMI 260
GENE 211Genomics3
3-5
CS 145Introduction to Databases3-4
CS 147Introduction to Human-Computer Interaction Design3-5
CS 221Artificial Intelligence: Principles and Techniques3-4
CS 228Probabilistic Graphical Models: Principles and Techniques3-4
CS 229Machine Learning3-4
CS 262
CS 270Modeling Biomedical Systems: Ontology, Terminology, Problem Solving3
CS 273AThe Human Genome Source Code3
CS 273BDeep Learning in Genomics and Biomedicine3
CS 274Representations and Algorithms for Computational Molecular Biology3-4
CS 275Translational Bioinformatics4
CS 279Computational Biology: Structure and Organization of Biomolecules and Cells3
CS 371Computational Biology in Four Dimensions3
CS 373Statistical and Machine Learning Methods for Genomics3
CS 374
EE 263Introduction to Linear Dynamical Systems3
EE 364AConvex Optimization I3
MS&E 152Introduction to Decision Analysis3-4
MS&E 252Decision Analysis I: Foundations of Decision Analysis3-4
STATS 206Applied Multivariate Analysis3
STATS 315AModern Applied Statistics: Learning2-3
STATS 315BModern Applied Statistics: Data Mining2-3
BMI 231
BMI 260
GENE 211Genomics3
BIOE 222A
BIOE 222B
CHEMENG 150Biochemical Engineering3
CHEMENG 174Environmental Microbiology I3
APPPHYS 294Cellular Biophysics3
BIO 104Advanced Molecular Biology5
BIO 118Genetic Analysis of Biological Processes4
BIO 129A
BIO 129B
BIO 188
BIO 189
BIO 214Advanced Cell Biology4
BIO 217
BIO 230Molecular and Cellular Immunology4
CHEM 135
CHEM 171Physical Chemistry I4
BIOC 218
BIOC 241Biological Macromolecules3-5
SBIO 228
BIOE 220Introduction to Imaging and Image-based Human Anatomy3
BIOE 222A
BIOE 222B
CHEMENG 150Biochemical Engineering3
CHEMENG 174Environmental Microbiology I3
CS 262
CS 274Representations and Algorithms for Computational Molecular Biology3-4
CS 279Computational Biology: Structure and Organization of Biomolecules and Cells3
CS 371Computational Biology in Four Dimensions3
CS 374
ME 281Biomechanics of Movement3
APPHYS 294
BIO 104Advanced Molecular Biology5
BIO 112Human Physiology4
BIO 118Genetic Analysis of Biological Processes4
BIO 129A
BIO 129B
BIO 158Developmental Neurobiology4
BIO 183Theoretical Population Genetics3
BIO 188
BIO 189
BIO 214Advanced Cell Biology4
BIO 217
BIO 230Molecular and Cellular Immunology4
CHEM 135
CHEM 171Physical Chemistry I4
BIOC 218
BIOC 241Biological Macromolecules3-5
DBIO 210Developmental Biology4
GENE 211Genomics3
SBIO 228
SURG 101Regional Study of Human Structure5

Computer Engineering Track

Units
EE 108
& EE 180
Digital System Design
and Digital Systems Architecture
6-8
8

EE 101A

Circuits I

EE 101B

Circuits II

EE 102A

Signal Processing and Linear Systems I

EE 102B

Signal Processing and Linear Systems II

CS 140

Operating Systems and Systems Programming

or CS 140E or CS 143

EE 109

Digital Systems Design Lab

EE 271

Introduction to VLSI Systems

CS 140

Operating Systems and Systems Programming (if not counted above)

or CS 140E or CS 143

CS 144

Introduction to Computer Networking

CS 149

Parallel Computing

CS 190

Software Design Studio

CS 240E

CS 244

Advanced Topics in Networking

EE 273

Digital Systems Engineering

EE 282

Computer Systems Architecture

CS 205A

Mathematical Methods for Robotics, Vision, and Graphics

CS 223A

Introduction to Robotics

ME 210

Introduction to Mechatronics

ENGR 105

Feedback Control Design

CS 225A

Experimental Robotics

CS 231A

Computer Vision: From 3D Reconstruction to Recognition

ENGR 205

Introduction to Control Design Techniques

ENGR 207B

Linear Control Systems II

CS 140
& CS 144

Operating Systems and Systems Programming
and Introduction to Computer Networking (CS 140E can substitute for CS 140)

CS 240

Advanced Topics in Operating Systems

CS 240E

CS 241

Embedded Systems Workshop

CS 244

Advanced Topics in Networking

CS 244B

Distributed Systems

CS 244E

EE 179

Analog and Digital Communication Systems

Graphics Track

Units
CS 148
& CS 248
Introduction to Computer Graphics and Imaging
and Interactive Computer Graphics
8
53-5

CS 205A

Mathematical Methods for Robotics, Vision, and Graphics (strongly recommended as a preferred choice)

CME 104

Linear Algebra and Partial Differential Equations for Engineers (Note: students taking CME 104 are also required to take its prerequisite course, CME 102)

CME 108

Introduction to Scientific Computing

MATH 52

Integral Calculus of Several Variables

MATH 113

Linear Algebra and Matrix Theory
6-8

CS 231A

Computer Vision: From 3D Reconstruction to Recognition

or CS 131

Computer Vision: Foundations and Applications

CS 233

Geometric and Topological Data Analysis

CS 268

Geometric Algorithms

CS 348A

Computer Graphics: Geometric Modeling & Processing

CS 348B

Computer Graphics: Image Synthesis Techniques

CS 348C

Computer Graphics: Animation and Simulation

 

Warning: This syllabus is subject to small changes.

Course Description

CS 2223. ALGORITHMS. Cat. I Building on a fundamental knowledge of data structures, data abstraction techniques, and mathematical tools, a number of examples of algorithm design and analysis, worst case and average case, will be developed. Topics include greedy algorithms, divide-and-conquer, dynamic programming, heuristics, and probabilistic algorithms. Problems will be drawn from areas such as sorting, graph theory, and string processing. The influence of the computational model on algorithm design will be discussed. Students will be expected to perform analysis on a variety of algorithms.
Recommended background: CS 2102 and CS 2022.


 

Class schedule

The class schedule (subject to small changes) is here.
Recently updated post-hurricane. Test 1 will be Monday 5 Nov.

 

Personnel

  • Professor Joshua D. Guttman
    Office hours in FL 137:
    • Monday 11:00 -- 12:00 and 3:00 -- 4:00
    • Thursday 10:00 -- 11:00
    • Friday 3:00 -- 3:30 as needed
    Available at other times also; send email with [cs223] in the subject line to schedule meetings.
  • Teaching Assistants Office hours in FL 314
    • Fei Song
      • Tuesday 10:00 -- 11:00
      • Wednesday 1:00 -- 2:00
      • Thursday 3:00 -- 4:00
    • Linglong Zhu
      • Monday 9:00 -- 10:00
      • Wednesday 11:00 -- 12:00
      • Thursday 9:00 -- 10:00
  • Student Assistant Xianjing Hu FL A22
    • Wednesday 3:00 -- 4:00
    • Thursday 11:00 -- 12:00
    • Friday 10:00 -- 11:00

Class Mailing Lists: To reach the members of the cs2223 staff, please send mail to the staff mailing list. Its address is cs2223 dash staff at cs dot wpi dot edu

To reach all students in the class, as well as the staff, you can substitute "all" for "staff". Send email to the whole class very sparingly (:-).


 

Textbook

Required Textbook:

T.H. Cormen, C.E. Leiserson, R.L. Rivest, and C. Stein. Introduction to Algorithms.
Third Edition, MIT Press, 2009. ISBN 978-0-262-03384-8.


Another Good Textbook:

J. Kleinberg, E. Tardos. Algorithm Design. Addison-Wesley, 2005.


Additional materials:

CS 2223 in Four Pages, a summary of the core material of the course.

A few slides on orders of growth

Seven Rules for big-O, Theta Comparisons

The Master Theorem

A number of sample programs used in class are gathered in in sample_programs.

Recommended Background


 

Grading

There will be five tests, but the first four will be less than the full class period. With more tests, we hope to give lower-stress, more incremental feedback.

Tests 1--4 8% each      32% total
Test 5 14%
Homework (4)      1% each 4% total
Projects (5) 9% each 45% total
Participation     5%

Your final grade will reflect your own work and achievements during the course. Any type of cheating will be penalized in accordance with the Academic Honesty Policy.

Students are expected to read the material assigned to each class in advance and to participate in class. Class participation will be taken into account when deciding students' final grades.

Policy on late work:Homework sets will not be accepted late. This means that students can ask questions about the homework in class, any time after the due date. Each homework set contributes only one point to the final grade.

Programming projects may be handed in late. You can hand in projects whenever you want. But there's a cost with late submission. Each 24 hours (or part thereof) late will cost you 10% (multiplicatively).

Thus, if you hand something in that would have been worth 93 on time, but it's 36 hours late, that means that you only get 93(.9)(.9)=75.

So, yes, you can hand programming projects in late, but it's expensive, and very expensive if you do it often. This policy allows students to make rational choices in planning when and how to do the work, and also ensures that the cost is not extreme if something unexpected comes up.


 

Tests

There will be a total of 5 tests. The first four will take less than a full class session. The final test is cumulative. The tests will be based on material covered by the homework assignments.Test dates and topics:
  1. Monday, 5 Nov Test 1
    Topic: big-Oh, Omega, and Theta notation.
  2. Friday, 9 Nov Test 2
    Topic: Graph search (BFS, DFS).
  3. Monday, 26 Nov Test 3
    Topic: Greedy and divide and conquer algorithms, solving recurrences.
  4. Monday, 3 Dec Test 4
    Topic: Dynamic programming algorithms, solving recurrences.
  5. Thursday, 13 Dec Test 5
    Retrospective.

Any scheduling issues must be discussed in advance.

Homework

Four homework sets will be assigned. They are intended to allow you to master the theoretical side of the course content. Homework will be submitted to turnin. Each homework set is worth only one percent of the course grade, and we will not grade them individually. The one percent score simply reflects the fact that you turned it in on time.

Why should you do the homework? Test questions will be engineered for maximal similarity to some of the questions in the homework sets. That's why, even though the homework isn't graded individually, it's very important. If you can solve the problems in the homework sets, you'll do well on the tests. If asking for extra points on a test question, you'll want to be able to point to what you did on related homework questions.

The homework sets will also contain some open-ended, challenging questions. Use them to deepen your understanding. You don't have to answer them all completely, but formulate a strategy on each and work out a few fully. They are excellent subjects for group discussion and collaboration.

You can collaborate on homework. In fact, you are strongly encouraged to work together in groups. People learn by talking, by sharing ideas, by finding gaps and flaws, by collaborating to fill them. This is also how scientific research happens. This way of studying is both enjoyable and effective.

Homework due dates:

  1. Thursday, 1 Nov The problem set is now available here. A version with answers to the first batch of questions is now here. Answers to the CLRS questions are now here.
  2. Wednesday, 7 Nov Now available here. Answers to the first group of questions are now available.
  3. Monday, 19 Nov The problem set is now available here.
    Answers to the first group of questions are now available.
  4. Sunday, 2 Dec The problem set is now available here. Answers to part A are now here.

Handwritten homework may be scanned or photographed---if legibly written and photographed in strong light with sharp focus---and then submitted as a zip file of PDFs or JPEGs. You may also use document preparation software. Use Turnin to submit homework.


 

Programming Projects

There will be five programming projects. They are intended to give you a practical mastery of the course material. They will give you opportunities to apply, measure, and adapt the algorithms discussed in the course.

Programming projects are individual work. You may not share code; you may not ask someone to look at your code and help you correct it (except the SA, TAs and professor); you may not assist a co-student. Any type of cheating will be penalized in accordance with the Academic Honesty Policy.

The programming projects will be due Mondays (generally, except Friday 30 Nov). The submission is not late if handed in at any time on the due date (US Eastern time :-). For instance, if you hand it in at 11:47 pm on the due date, then it's not late.

Caution: Turnin has sometimes crashed around midnight, on nights when various classes have things due. I recommend submitting partial results early.

The due dates will be:

  1. Monday, 5 Nov The first problem set description is now here, and the starter code is here. Use this code also as a starting point to explore Lua.
  2. Monday, 12 Nov The second problem set description is now here, and the starter code is here.
    Some notes on Project 2 are at proj/proj2_notes.pdf. As people ask questions and we answer them, this document will grow, so please look back here as problems arise. And if you don't see an answer, please ask!
  3. Tuesday, 20 Nov The third project is now here, and the starter code is at proj/proj3.zip.
    Some notes on Project 3 are at proj/notes_proj3.pdf. As people ask questions and we answer them, this document will grow, so please look back here as problems arise. And if you don't see an answer, please ask!
  4. Monday, 3 Dec The fourth project is now described here and the starter code is in this Zip file.
  5. Monday, 10 Dec The last project is now described here and the starter code is in this Zip file.
    Some notes on Project 5 are now at proj/notes_proj5.pdf.

Use Turnin to submit projects.

Late policy for projects: You can hand in projects late. But there's a cost associated. Each 24 hours (or part thereof) late will cost you 10% (multiplicatively). See above.


 

Programming Language: Lua

All the programming projects will be done using Lua. Lua is a very simple programming language, designed to allow the maximum computational content to be expressed with a minimum of syntactic clutter and verbosity. It is a procedural language like C and Java, but has excellent support for recursion and higher-order functions. In this regard it is as good as Scheme.

I will schedule Lua Labs early in the term, and I will write up a small guide to Lua. One of the advantages of Lua is that it has fairly few gotchas. Three main gotchas are:

  • Forgetting the return statement. If a function finishes without encountering a return statement, it returns nil. This is the most annoying single thing about the language, I think.
    When your code is behaving buggily, always check that you haven't left out a return statement.
    return doesn't make the function return, it only tells it what value it should return if in fact it is returning.
  • Forgetting local when declaring a local variable. Inside a function, local varname = initval declares a local variable named varname. Nothing of the same name in any other scope (or recursive call) can be affected. Leave out the word local, and things will go haywire.
  • You must use the word then to start the then-clause of a conditional. Unlike C and Java, a conditional takes the form

    if condition then statement1 else statement2 end

    The else part is optional.

You can download Lua for the main types of system here, and Windows users often like Lua for Windows. Windows users often like to use the Scite editor, and Macintosh users often like TextWrangler. Both are freely available, and easy to find by googling. I like Emacs, using the lua-mode available on the web. It gives excellent support for running Lua interactively as a subordinate process under Emacs.

I will put three copies of the Lua Reference Manual on reserve in the library, but I mainly use the online version. They have a very nice book on Programming in Lua. The version that's free on line is not 100% up-to-date, but it is totally adequate for the parts of the language we'll use in this course.

A recent survey of the popularity of programming languages from TIOBE reports for October 2012 that Lua has risen slightly popularity during the past year. Last year it surged, and rose eight positions from 2010. It is now 16th in popularity.

Lua Labs:

I will schedule Lua Labs early in the term. These will be sessions to sit down in groups and go over problems, examples, and tricks.

Before coming to a Lua Lab, please download and install Lua on your system. It's available here. If possible, try to run a few examples. Lua labs are currently scheduled in FL 137 for:

  • Thurs, 25 Oct, 10:00 -- 11:00 (office hr)
  • Fri, 26 Oct, 10:00 -- 10:45, 3:00--4:00
  • Mon, 29 Oct, 11:00 -- 12:30 and 3:00 -- 4:00 (office hr)
  • Thurs, 2 Nov, 10:00 -- 11:00 (office hr)

A number of sample programs used in class are gathered in in sample_programs.

One thought on “Cs223a Homework Chart

Leave a Reply

Your email address will not be published. Required fields are marked *