CPSC 221: Basic Algorithms and Data Structures
2016 Winter Term 2 (January-April 2017)
Administration
Description: Design and analysis of basic algorithms and
data structures; algorithm analysis methods, searching and sorting
algorithms, basic data structures, graphs and concurrency.
Prerequisites: You need to have passed one of CPSC 210, EECE 210, or CPEN 221; and you need to have passed either CPSC 121 or MATH 220. You will be dropped from the course if you do not have the prerequisites or their equivalent (e.g., in case you transferred from another post-secondary institution). The Department of Computer Science enforces prerequisites.
The SSC Web page listing the course scheduling information and prerequisites is found at
this link. Note that you can make minor changes to the URL if you want to see information about another course.
Texts:
See the Readings webpage.
Office Hours:
See the Schedule webpage. The page might not be updated in the first week, that is, until the instructors and TAs get their schedules worked out.
Normally, when we hold office hours, we service a small number of students at the same time, since other students may be interested in the same question as posed by another student. If you need to meet privately due to confidentiality reasons (personal, medical, etc.), we can do so.
Labs:
Your scheduled lab sessions are required, and marks are awarded for various deliverables. Lab write-ups may contain a Pre-Lab section, which must be completed before the lab session.
You may also work on labs at home, get help during scheduled Office Hours,
or post questions on the course discussion boards; but, please don't post your code on the discussion board.
You should aim to finish your work and get it marked within the 2-hour session.
However, if necessary, you may continue to work on it over the following week,
as long as you have it completed no later than the beginning of your next lab session.
Getting Your Work Marked If You Are Absent:
If you are not able to attend your regular Lab section (or you were so far
unable to register to any Lab section), you can try to attend another Lab
section at the discretion of the TAs running that section. For example, if the
room is packed or if the TAs are busy with students who are actually registered in that section,
they might turn you away). Therefore, it's recommended that you e-mail the TAs
running the section that you want to attend, as early as possible, so they can keep
track of how many extra people would like to attend. Then, they could let you
know in advance if the section is too full.
Getting Help with the Current Lab:
You can get help with your work on the current lab at TA Office Hours,
or by posting questions on the course discussion boards. Many of the TAs will be holding office hours,
so there will likely be a lot to choose from.
(See the course Calendar at Schedule
to determine what Office Hours are being held before your next lab session.)
Labs will introduce C++; however, because you are second-year students, and this is at least the third programming course that you have taken, much of the responsibility of learning the new language
will fall on you. If you need C++ programming resources, you should read the textbook (see the textbook section of the website), visit the Computer Science Reading Room (aka CS library on the 2nd floor of the ICCS building -- yes, you can borrow books, and they have lots of useful books), visit instructional Web sites, make use of office hours, make use of the course discussion boards, etc. But, don't cheat! It's not permissable to copy parts of someone else's code or to hire a tutor to write some of your code.
Evaluation:
Your final course mark will be based tentatively on the following
breakdown. The staff reserves the right to change this scheme, but we do not anticipate changing it.
Labs | | 10% |
Theory Assns/Quizzes | |
15% (will be equally weighted) |
Programming Projects | | 15% (may be equally weighted) |
Midterm Exam | | 20% |
Final Exam | | 40% |
To pass the course,
you must obtain a 50% overall mark and, in addition, you must pass the final exam.
In accordance with the Department of Computer Science's practice, students who fail the
final exam will receive as their course grade the minimum of their normally computed grade and 45%.
Approximate Topic Schedule:
See Readings on the Schedule webpage.
Communication: Most electronic communication should go to Piazza.
(You are expected to read the Announcements daily!) Personal questions or those that might violate academic conduct standards if posted
should go to your Instructor or to the individual staff member you
wish to contact (see the home page for e-mail addresses).
Assignments:
There will be roughly three programming projects and three written assignments during the term.
- Programming Environment: You may use any development
environment you wish, but all programming projects must compile and
run correctly on the Linux ugrad.cs.ubc.ca
servers (such as
lulu.ugrad.cs.ubc.ca) using GNU C++. For example, some students may wish to do most of
their pre-final development work in Microsoft's Visual Studio C++, Apple's Xcode,
or other environment. See the computing
and programming guideline pages for GNU C++ tips.
- Submission: Written assignments and programming projects will submitted with the Department of Computer Science's
"handin" tool.
Check handin's acknowledgment of your submission to see if your
submission proceeded correctly. Failure to do so leaves you at risk for
getting zero for the assignment.
- Schedule: Written assignments and programming projects will normally be due at
21:00 (9:00 PM) on the due date.
- Late Policy: Late work will receive no credit,
but we can be flexible for medical cases, etc.
- Collaboration: See the academic conduct guidelines.
Exams: There will be one midterm and one final exam.
- Scheduling: Dates for the exams are available on the
Schedule webpage.
The midterm exam will be at the same date and time for all sections.
NOTE: No calculators, phones, smart watches, or other electronic equipment are allowed!
- Concession (missing an exam):
Do not write an exam (especially the final!) if a medical factor might significantly
impair your performance.
- If you are unable to write the midterm exam due to illness,
inform your instructor immediately, detailing the period during which you were
ill. A doctor's note will likely be required.
The instructor will establish and explain accommodation at that time.
- If you are unable to write the final exam due to illness, contact your Faculty's
advising office (e.g., Science students will go to the
Science Undergraduate advising office;
if you're in Applied Science, Commerce, Arts, etc., you'll need to visit your own
Faculty's advising office) immediately.
They screen all requests, and they will let the instructor know if a Standing
Deferred option is available, which opens the door to you writing a future exam (e.g., the following
term, or during the summer Deferred/Supplemental exam period in late July or early August).
Special accommodations will be made for those students who are graduating before the next
exam is offered. In the interim,
your current course grade (i.e., the maximum of 45 and your current standing in the
course) will temporarily appear on your transcript along with the letters "SD" for Standing
Deferred, which means your course grade will likely go up substantially after you write the
final exam).
Academic Conduct:
Collaboration enhances the learning experience.
We encourage collaboration in various ways throughout the course, subject to the rules stated here:
- Programming projects:
You may work in groups of two, and we encourage you to do so.
A group hands in a single submission and gets a single grade.
Your group may also work with any other person or resource subject to the following rules:
-
The group must spend at least 10 minutes working on each problem
independently before collaborating with others.
-
Collaboration with others must be limited to discussion
and brainstorming. No record of any sort (e.g., written, photographed, or electronic material) may be exchanged or leave the brainstorming
session.
-
After collaborating, each student must take a half-hour break
from the problem. Watching some
brainless TV
is a recommended activity.
-
Each group must write up their own solution independently,
using their own words to prove that they understand the problem on
their own.
-
Groups must acknowledge all collaborators or sources of
assistance in their submission, although you need only name CPSC
221 course staff, handouts, and required textbooks if you quote or
adapt directly from them.
You are allowed (and expected!)
to record the names of people in brainstorming sessions with you.
- Theory Assignments: Subject to the same conditions as Programming Projects.
- Labs: You are permitted to work on labs in groups of two.
- Groups:
- Must indicate they are working together in the
appropriate venue (on the front page/README for projects, to the lab TA for labs).
- Must submit only one joint solution to the lab/project.
- Will receive one grade for the lab/project that
applies to every group member (except in extreme circumstances).
Groups should collaborate rather than, for example, work on individual parts and stitch the result
together. For advice on group work, speak with the teaching staff and check out
All
I Need to Know About Pair Programming I Learned in Kindergarten
for a lighthearted but well-researched perspective on pair programming in Computer Science.
- Exams will follow the University's
Rules Governing Formal
Examinations, including disallowing any communication by any means with anyone besides
the exam's invigilators except where specifically noted in exam instructions.
Violation of any of these rules constitutes academic misconduct and
is subject to penalties ranging from a grade of zero on a particular
assessment to suspension from the University with a notation on your
transcript. If you are
uncertain as to what is or is not reasonable collaboration, please
contact the instructor. If you are having problems understanding or
keeping up with the material, please contact your instructor or TA to
discuss how we can fix the problem. Don't cheat!
Last Modified:
January 2, 2017