<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
|''Type:''|file|
|''URL:''|http://cs.nyu.edu/~yap/classes/datastruc/10f|
|''Workspace:''|(default)|

This tiddler was automatically created to record the details of this server
Type the text for '27 August 2010'
You may be curious about this web document.

It is written using a web publishing technology called ''~TiddlyWiki'' (or TW). The distinctive feature of TW is that all the contents of this wiki is in one single HTML file (so it is somewhat larger than the typical HTML file).   You can even download a copy of this file and add your own content (let me know if you do something interesting that is sharable with the class).

I am not an expert on these technologies, but if you have any questions about them, you can ask me and I will try to find answers.

!! Click on one of these tabs for more information:
<<tabs tabsID
   "Navigating These Pages" "?" [[NavigatingThesePages]]
   "Wiki Technology" "?" [[WikiTechnology]]
   "Tiddly Help" "?" [[TiddlyHelp]]
>>

The university and department has an academic integrity policy that must be taken seriously.   Here is what it means for this class:
*All handed in assignments must represent your own work. 
*If you use any program or solution from sources in the open literature, you must give full attribution. 
*You should never copy work of other students, nor let your work be copied by others. 
*We do encourage you to discuss problems and material with other students in the class, as this foster learning. But after the discussions, you must write up your own solutions separately.
!!Please check this tiddler regularly.  The posts here are in reverse chronological order.
;Dec 15:
: Extra Office Hours for the Exam Week: @@Mon Dec 20, 3-4@@ and @@Tue Dec 21, 11-12.@@
;Dec 13:
: Last homework (hw7) posted.  It is not required but study it for your final exam preparation!    We will post extra office hours tomorrow.
;Nov 18:
: Please sign up for 2nd and 3rd Round of Lunch Date: @@Tue Nov 30@@ and @@Thu Dec 9@@ (both 12:15pm).
;Oct 26:
: Hw4 posted (due Nov 2).
;Oct 14:
: ''Graded Hw3'' can be picked up from my office after 12 on Monday Oct 18.
: ''Extra office hours for midterm'' on Monday Oct 18, from 12-2.
;Oct 7:
: ''Hw3'' posted (due Oct 14)
;Oct 5:
: ''Midterm date'' is changed from Oct 14 to @@Tue Oct 19@@.   Remember to prepare a sheet of notes to bring to the exam.
;Sep 23:
: ''Hw2'' posted  (due Sep 30).
;Sep 21:
: Posted under ''Course Mechanics'' for our grader information, and final exam date!
;Sep 11:
: ''Hw1'' posted (due Sep 21).
;Sep 9:
: ''No recitation class'' next week.
;Sep 7:
: ''Welcome'' to my Data Structures Course for Fall 2010.
convex hulls,
Delaunay triangularion and Voronoi diagrams,
motion planning,
curves and surfaces,
mesh generation,
polyhedral modeling.
Just looking ahead -- what next?

After you finish this course, a next natural course to take is
//Basic Algorithms// (V22.0310) where you learn basic paradigms for
constructing algorithms.   These paradigms are also called ''algorithmic techniques''
and they often go hand-in-hand with data structures.   You will further develop
skills in analysis of algorithms, which you already have a foretaste of
in data structures.
!! Introduction
Computer Programming is key to a great productivity tool.
More and more, programming is not just for technical applications, but is used
for personal interest applications including web use.
After learning the basics of programming, you soon realize that we need to
scale up to writing larger and more complex programs.   To do this systematically, 
one needs to develop some further theory and techniques. 
''Data Structures'' is fundamental to this next step, and is the concern of this course.

What //is// a Data Structure?   You can think of the ''array'' which you have 
encountered in introductory programming as a data structure.   But this array could be viewed
more abstractly, as a ''queue'' or a ''list'' data structure.  This abstract view point is
the preferred one in this course.  You may have also heard of the
''tree'' data structure (but be forewarned -- there are many, many variants of this
data structure).  This course has three general goals:
* Introduction to basic Data Structures (queues, trees, etc)
* Applications of these Data Structures in algorithms
* Analysis of Data Structures

This third goal of //analysis// might not be obvious -- but part of understanding data structure
structures beyond using it mechanically is to understanding the //why//'s and //what if//'s.
Analysis will require some basic mathematical skills which we will provide.

Programming these concepts in {{{Java}}} will be an integral part of this course.

!Additional Information (click on any tab):

<<tabs cookie-topics
  "Pre-requisites" "Do you have it?" [[Prerequisites]]
  "Topics" "What will we learn?" [[DatastructureTopics]]
  "Text Book" "Required text" [[TextBook]]
  "Programming Requirement" "Java needed!" [[ProgrammingRequirement]]
  "Beyond Data Structures" "What next?" [[BeyondDataStructures]]
>>







; Course Web Page:
:  URL [[cs.nyu.edu/~yap/classes/datastruc/|http://cs.nyu.edu/~yap/classes/datastruc/]]
:  //Please bookmark this page right away!//
; Course Number: 
: @@V22.0102.00X@@   where X=1,2 or 3 is the section number.
: Note: Section 1 is the honors section, Section 2 the regular section, and Section 3 is the recitation section.
: All students in Sections 1 and 2 must register for Section 3 as well.
; Instructor:
:  Professor Chee Yap
:  You can contact me at @@yap(at)cs(dot)nyu(dot)edu@@ or #212-998-3114, 
: My office is Room 301, Warren Weaver Hall
; Office Hours: 
: Tue 11:30-12:30 and Thur, 3:30-4:30 pm
: (by appointment for other times)
; Grader:
: Mayank Rana is grader for Section 2.  His email is @@mayank.rana@nyu.edu@@.
: Sathya Hariesh is grader for Section 1.  His email is @@shp322@nyu.edu@@.
; Recitation Leader:
: Mayank Rana will be the Recitation Leader.
; Lectures:
: Tue and Thur,   2:00-3:15 pm, Room 102, Warren Weaver Hall
; Recitation:
: Thur 9:30-10:45 pm  (same room as Lectures)
: Note that attending recitations is an integral part of this course, and new material may be introduced during recitation.
; Grades:
: Grade will be curved, made up of 
:* 35% Homework and Quizzes
:* 25% Mid Term
:* 40% Final Exam
; Mid Term Exam:
: --Thu Oct 14--  @@new:@@ Tue Oct 19
; Final Exam:
: Tuesday, Dec 21 at 2:00pm-3:50pm in WWH 102
; Regular vs. Honors Sections
: Lectures and recitations are common to regular and honors sections.
: But homework and exams will be differentiated.
; Academic Integrity
: [[ [Please Click to Read] |Academic Integrity]]
* Abstract data types and their implementations
* Stacks and Queues
* Priority queues
* Dictionaries
* Search Trees
* Sorting
* Recursion
[[Welcome]]
My absolute priority is to help you master the subject of Data Structures.
Do not let yourself to fall behind.
I want to be as available as possible, outside of regular lectures or office hours.
You can always make an appointment to see me.
How do we grade you?

You might find these [[instructions| http://cs.nyu.edu/~yap/classes/info/GraderInstr.htm]] for my graders and teaching assistants useful.
;Academic Integrity:    [[ [Please Read This] |Academic Integrity]]
;Homework Pickup:  
: Choose one: [[ [Section 1] |http://cs.nyu.edu/~yap/classes/datastruc/10f/hw/hw_Sec1.pdf]]  |  [[ [Section 2] |http://cs.nyu.edu/~yap/classes/datastruc/10f/hw/hw_Sec2.pdf]] 
:  All homework assignments are found in a single (cumulative) pdf file.
;Homework Solutions:
: For written part, choose one of these: [[ [Section 1] |http://cs.nyu.edu/~yap/classes/datastruc/10f/hw/hw_Sec1_Sol.pdf]]  |  [[ [Section 2] |http://cs.nyu.edu/~yap/classes/datastruc/10f/hw/hw_Sec2_Sol.pdf]] 
: For programming part, go to this [[directory| http://cs.nyu.edu/~yap/classes/datastruc/10f/pickup]].
!! Programming Aid:
* Please pick up a [[sample Makefile|http://cs.nyu.edu/~yap/classes/datastruc/10f/pickup/Makefile-sample]].  Note that when you save this file in your directory, you must keep the name "Makefile" (capital M), and not change it into "Makefile.txt" as some editors are prone to do.
* See [[Useful Links]] for more information.
!! Pickup Directory:
: Please click this [[ Pickup Directory |http://cs.nyu.edu/~yap/classes/datastruc/10f/pickup]] for homework solutions, programming solutions, sample programs, and miscellaneous lecture notes.




;Sep 7: First Class

* We went over the information in this webpage (Course Description and Mechanics)
** Course grade is curved: 30% homework/quizzes, 25% midterm, 35% final
* We introduce some mathematical background from Chapter 1.
** Logarithms: the basic definition: {{block{
      @@ log~~b~~x = u@@   if and only if b^^u^^ = x }}}.   Note that this assumes that the exponential function b^^u^^ is understood.
** Some conventions on bases of logarithms: @@ lg(x), ln(x), Log(x), and log(x)@@ (without specifying any base).
** The two laws of logarithm (see chapter 1)
* We also started using the big-Oh notation (from Chapter 2.1)
** MOTIVATION: How can we compare two functions f and g?
** @@Function g dominates function f@@ if: there is some x~~0~~ such that for all x>x~~0~~, we have g(x) >= f(x).
** @@Function g is Big-Oh of f @@ if: there is some constant C>0 such that f is dominated by Cf.   Notationally, we write  "@@g = O(f)@@"
* We discussed the Selection Problem.

;Preparation for next class: 
:Please read Chapter 1, and especially about the Selection Problem in the first page.   Historical background of selection problem: from Lewis Carroll, Oxford Don, author of Alice in Wonderland -- how to design a more perfect tennis tournament.
!!!Week of Sep 14: Professor Davies covered 2 lectures for this week.

Here are his notes:

!!!!Tue Sep 14:
-- Explained "asymptotic, order-of-magnitude, worst case, running time analysis" and why it is the "right" measure for algorithms
-- Explained o(F), O(F), omega(F), Omega(F), and Theta(F)
-- Gave the basic rules for doing order-of-magnitude comparison

!!!!Thur Sep 16:
: I will show how one derives o/m running times for simple algorithms, and time permitting do more examples of simple comparisons.


Example 1: Copy array A to array B. n is length of arrays A and B.

1. for (i=0; i<n ; i++) 
2.    {  B[i] = A[i]; }

Analysis: 
   Step 2 is O(1)
   Loop 1-2 executes n times
   Total time: O(n)

Example 2: Search for value x in array A. n is length of array A

1. { found = false;
2.   for (i=0; i<n; i++) {
3.       if (A[i] == x) {
4.          found = true;
5           exitloop; }
6.      }
7.  }

Analysis:
   Step 1 is O(1).
   Steps 4 and 5 are O(1)
   Block 4-5 is O(1)
   Conditional 3-5 is O(1)
   Loop 2-6 executes at most n times (in the case where x is either the
      last element or not in A). Total: O(n)
   Block 1-7 is O(n)

Note this illustrates the difficulty with average case analysis. What is the
probability that a randomly chosen value x is _not_ in a randomly chosen
array A?  Very ill-defined.

Students sometimes do this kind of calculation as follows:
   Step 1 is O(1).
   Steps 4 and 5 are O(1)
   Block 4-5 is O(2)
   Conditional 3-5 is O(2)
   Loop 2-6 executes at most n times (in the case where x is either the
      last element or not in A). Total: O(2n)
   Block 1-7 is O(2n+1)
Strictly speaking this is not _incorrect_ but it looks _stupid_ because
O(2n+1) is the same thing as O(n). The expression inside a O(...) should
always be in the simplest form.

Example 3: Are there any repeated values in A?  n=A.length

1. found=false;
2. for (i=0; i<n-1; i++) {
3.   for (j=i+1; j<n; j++) {
4.     if (A[i]==A[j]) {
5.       found=true;
6.       exitloop;
7.       }
8.     if (found) then exitloop;
9.     }
10.  }

Analysis:
   1, 5, 6 are O(1)     
   Block 5-6 is O(1)
   Conditional 4-7 is O(1)
   Inner loop 3-8 executes at most O(n) times. Total time is O(n)
   Outer loop 2-9 executes O(n) times. Total time is O(n^2)
   Block 1-9 is O(n)


More careful analysis;
   On the mth iteration of the outer loop (i=m), the inner loop 
   iterates at most n-(m+1) times. Therefore the total number of
   iterations of the inner loop, over the entire execution of the algorithm, 
   (n-1) + (n-2) + ... + 3 + 2 + 1 = n(n-1)/2 is O(n^2)

In this case, you get the same answer (in terms of order of magnitude) but
in other cases, a more careful analysis gives a tighter bound.

Example 4.  U and V are character strings of length k. Are they the same string?

function streql(U,V)
1. { for (i=0; i<k; i++) {
2.     if (U[i] != V[i]) 
3.       return false;
4.    }
5.   return true;
end streql.

Analysis: Lines 3 and 5 are O(1)
          Conditional 2-3 is O(1)
          Loop 1-4 has at most k iterations. Total time is O(k)
          Block 1-5 is O(k)


Example 5. W is a string of k characters. T is an array of n k-character
strings. Is W one of the elements of T?

1. { for (i=0; i<n; i++) {
2.      if (streql(W,T[i])) 
3.        return true;
4.     }
5.   return false;
6. }


Analysis:
  Lines 3 and 5 are O(1)
  Evaluating the condition in line 2 is O(k). So the conditional is O(k)
  The loop 1-4 executes at most n times. Total running time is O(nk)
  Block 1-6 is O(nk)

Two points to notice:

1. In analyzing a conditional you have to consider the time to evaluate
the condition. In analyzing a loop, you have to consider the time to
evaluate the loop operations. For example if you have the loop

  for(i=f(x); g(i); i=h(i))

then the initialization i=f(x) is executed once, when execution enters the
loop. The increment i=h(i) and the continuation test g(i) are executed
on each iteration. So you have to include these in the time for the loop.

This didn't come up in the first few examples, because all these were O(1)
operations.

2. If you call a function, then the time required is the time associated
with the function on that particular argument.

Example 6. W is a string of k characters. T is a string of n characters.
Assume k < n.  Is W a substring of T?

 1. { found = false;
 2.   for (i=0; i < n-k; i++) {
 3.     match=true;
 4.     for (j=0; j<k; j++) {
 5.        if (W[j] != T[i+j]) {
 6.           match = false;
 7.           exitloop
 8.          }
 9        }
10.     if (match) {
11.        found = true;
12.        exitloop;
13.      }
14.    }
15.  return found;
16.}

Analysis:
   1. 3, 6, 7, 11, 12, 15 are O(1)
   Conditional 5-8 is O(1)
   Loop 4-8 executes at most k times. Running time is O(k)
   Conditional 10-13 is O(1)
   Block 3-13 is O(k)
   Loop 2-14 executes n-k times; so time O(n-k)
      Total running time is O((n-k)*k)
   Block 1-15 is O((n-k)*k)

Question for thought: should we abbreviate this as O(nk)?
     
; What is an ADT or Abstract Data Type?
: e.g., a list of items, (A, B, C,...)
: abstract operations on list:
     item FirstItem( ): A
     void PrintList( )
     boolean Find(item X)
     item Find-kth(int K)
: So, the List ADT is characterized by this list of operations
: It is "abstract" because the ADT might be implemented in different
ways (e.g., as arrays or as linked lists).
; Implementation with Arrays 
:  (see Text)
; Implementation with Linked Lists
:  (see Text)
; Java's List Interface:
: It is important to realize that it is a ''generic'' interface (i.e., the types of the list items are parametrized):
: Here is the outline:
{{{
       public interface List <T> extends Collection <T> {
            T  get( int );
            T  set( int, T);
            void add( int, T);
            void remove( int );
            ListIterator <T> listIter( );
       }
}}}

; What is an Iterator?
:  This is the concept of a ''current position'' as you go through a collection of items. So it must have a memory of where you are at any moment, and this is implemented as a private member:
{{{
        public class MyArrayList<T> implements Iterable <T> {
        }
}}}

; The Stack ADT
:   This is characterized by two key methods: push and pop
:   Push amounts to adding an item at the tail-end of the list, and pop amounts to removing an item from the front-end of the list.  Hence a Stack is also known as a ''FIFO'' or first-in-first-out list.
>  void push( Item );
>  Item pop( );
:   The stack is just a restricted version of a list, so the implementation can be directly be based on any List class.

; The Queue ADT
: This is characterized by two key methods: enqueue and dequeue
: Enqueue amounts to adding an item at the tail-end of the list, and dequeue amounts to removing an item from the tail-end of the list.  Hence a Queue is also known as a ''LIFO'' or last-in-first-out list.
> void enqueue( Item );
> Item pop( );
: Again, a queue is trivially implemented by any List class.
; Trees in general
: A tree is a collection of nodes, and these nodes are related by a binary relation called (parent-child) relation.
:  Trees  are special kinds of graphs (specialization in two main ways: no cycles and connected)
:  All our trees (if non-empty) have a distinguished node called the root.
: In general, a node can have zero or more children.
: Some terminology: @@root, leaf/internal node, parent/child, ancestor/descendant, depth/height, edge, path, traversal, subtree.@@ Also: proper ancestor/descendant, empty or non-empty tree.
; Binary Trees
: ''Definition of a binary tree T'': it is either an empty tree or it has a root R and two subtrees T~~R~~ and T~~L~~, both of which are also binary trees.  If any subtree is non-empty, then its root is the child of R.
: This recursive definition is very important -- we can easily prove many properties about binary trees using this definition.
: We will focus on the special case where there are at most 2 children, calling them ''binary trees''. 
: ''Full'' binary trees are those whose nodes have either zero or two children (so, one child only is disallowed).
: @@Basic Facts:@@ 
# A full binary tree with n leaves must have exactly n-1 internal nodes.
# A binary tree with n nodes has height at least log n.
; Binary Search Trees (BST)
: A BST is a binary tree T in which each node is associated with an Item.  The Item comprise a pair (data, key) where key must be a comparable value (typically, integers).  Moreover, the key in the root of T is less than the keys in any node of T~~R~~, and more than the keys in any node of T~~L~~.
: Remark: this definition implies that the keys are unique in a BST.  If non-unique, we need to be a bit more careful in this definition.
: We can search for any key in a BST T in time O(height(T)).  NOTE: what we return from the search is the data associated with the key.  Recall that an item is a pair of (key, data) values.
Although our primary reference is the text book, I may find it useful
to augment it with my own notes, which would be posted here.   These notes are a summary of what we discussed in class -- they are not meant to be complete in any way!

In addition, I have some lecture notes (generally at a graduate level)
on data structures and algorithms which may be found [[here|http://cs.nyu.edu/faculty/yap/bks/algo]],
in case you are interested.

#<<slider lect1 [[Lecture 1]] "Lecture 1: Introduction to Data Structures and its Analysis (some math background)" "">>
#<<slider rec1 [[Recitation 1]] "Recitation 1" "">>
#<<slider lect2 [[Lecture 2]] "Lecture 2 (Covered by Prof.Davis):  Asymptotic Notations and Examples of Complexity Analysis" "">>
#<<slider lect3 [[Lecture 3]] "Lecture 3:  ADT: Lists, Stacks, Queues" "">>
#<<slider lect4 [[Lecture 4]] "Lecture 4: Trees (binary search trees)" "">>
This is a test.

{{navbar{
{{next{
[[next: Definitions >>|Definitions]]
}}}{{prev{
[[<< previously: Using TiddlyWiki|Using TiddlyWiki]]
}}}
}}}
[[Welcome]]
[[Course Description]]
[[Course Mechanics]]
[[Getting Help]]
-------------
[[Announcements]]
[[Lecture Schedule|Schedule of Lectures]]
[[Lecture Notes]]
[[Homework]]
[[Reading and Exams]]
-----------
[[About this document|About this document]]
[[Useful Links]]
/% [[Chee's pmWiki | http://cs.nyu.edu/~yap/wiki/pm]] %/

>Generally speaking, when you click on a clickable link, a short page of information (called a ''tiddler'') will be added to your current view, usually at the top of the current view. So the order in which these tiddlers are presented on your page is determined by your clicks!   You can also close any tiddler by clicking on the ''close'' link on its upper right.
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<<plugins>>
We assume that you have taken a basic programming course, and you
know the programming language Java.

In our department, it is the course V22.0101, Intro to Programming.
If you did not take this course, please talk to me about this.

But in this course (and in our department), we will require the programming language ''Java''.

You will be asked to program in Java in homework.

; General remark:
Once you learned how to program, most of this skill is transferrable
to any programming language you like.
Of course, different languages have different strengths and
weaknesses.

!!! Reading Guide:
: In each chapter, the sections or subsections can be classified into one of three categories:@@ "focus", "read" or "skip"@@.  Here I will explicitly state which to @@"focus"@@ or to @@"skip"@@.  All other sections should be read at some level of understanding.  Note that Chapters 1-4 were from the Midterm Reading Guide (unchanged).

# Chapter 1: Focus: Section 1.2.  Skip: Section 1.4.
# Chapter 2: Focus: Section 2.1, Subsection 2.4.2.
# Chapter 3: Focus: Section 3.5 (LinkedList).
# Chapter 4: Skip: Section 4.3.5. Focus: Section 4.4 (AVL tree), Section 4.5 (Splay tree), 4.8.2 (Maps).
# @@Chapter 5, Hashing: @@ The entire chapter will be in our focus.  Some of these sections include 5.2 (Hash functions), 5.3 (Separate Chaining), 5.4 (Hash Tables without Linked Lists) and 5.7 (Extended Hashing).  Please note that you must understand Theorem 5.1 (p.180) on quadratic probing. 
# @@Chapter 6, Priority Queues:@@ Focus on Binary Heaps (6.3) but you may skip Subsection 6.3.4, also skip Skew Heaps (6.7) and Binomial Heaps (6.8). Remember that you have to internalize the algorithms so that you can do "hand-simulation" by drawing the results of insertion, build-heaps, deletion, etc.
# @@Chapter 7, Sorting:@@ Focus on Insertion Sort (7.2), Heapsort (7.5), Mergesort (7.6), Quicksort (7.7), and General Lower Bound (7.8). Solve recurrences such as the mergesort recurrence using the "EGVS" method -- expand, guess, verify and stop, and the transformation method. Understand the concept of a "Decision Tree" (I called this a "Tree Program in class" -- it is a binary tree in which each internal node has a comparison like a:b or b:c. Skip Analysis of Quicksort (7.7.5), Analysis of Selection (7.7.6), and External Sorting (7.10).

!!! Final Exam (Tue Dec 21, 2010)
# It will take place during regular class hours, in the usual room.
# Please prepare TWO sheets of  8"x11" (2-sided) "crip" notes.  You can put anything in it, and it any size font.
# You may reuse the sheet from midterm, and prepare a new one.  But you can also prepare two new sheets.
# The style of the exam will be as in midterm.  But remember that the midterm in 1 hour, and the final is 2 hours.


!!! Midterm (Tue Oct 19, 2010)
# Please prepare an 8"x11" sheet (2-sided) of "crip" notes.  You can put anything in it, and it any size font.
# Hint: for the Final Exam, you are allowed two such sheets, so one of them can be the one from Midterm.
# The exam will have a programming aspect in which you are to write simple Java code that are accurate and compilable.
# As for the algorithms, you must know how to do @@"hand-simulation"@@.  E.g., give an AVL tree T and a key k, you should know how to insert k into T and draw the new tree correctly.
# Here are two sample midterms from the past (unfortunately, the closest I could get are from the course "Basic Algorithms" (V22.03010) which can be viewed as a slightly more advanced version of "Data Structures":  [[2000 fall| http://cs.nyu.edu/~yap/classes/datastruc/10f/pickup/sample-midterm-basic2000f.pdf]] and [[2001 spring| http://cs.nyu.edu/~yap/classes/datastruc/10f/pickup/sample-midterm-basic2001s.pdf]].
# Since we did not have time to cover Splay Trees and B-Trees in Chapter 4, they will not be required for the midterm.

!!! Midterm Solutions (Thu Oct 21, 2010)
# [[Section 1|http://cs.nyu.edu/~yap/classes/datastruc/10f/pickup/mid_Sec1_Sol.pdf]]
# [[Section 2|http://cs.nyu.edu/~yap/classes/datastruc/10f/pickup/mid_Sec2_Sol.pdf]]

!!! Additional Lecture Notes
: I have some advanced lectures notes on topics we cover (mainly for Masters or PhD level courses).  Feel free to consult them if you are interested.
# [[Search Trees | http://cs.nyu.edu/~yap/classes/datastruc/10f/pickup/l3_BASE.pdf]]
# [[Amortization (Splay Trees) | http://cs.nyu.edu/~yap/classes/datastruc/10f/pickup/l6_BASE.pdf]]
(1) Define Logarithm more carefully -- See my Notes
(2) Program in class (ask a volunteer):
     Find Max, Find Second.
Please note that dates are subject to change.

|!Week |!Date (Tue)|!Topic |! Reference |! Comments|h
|1|Sep 7| Java Review | Chap. 1 | First Class, Read Chap 1 (skip Sect.1.4). |
|2|Sep 14| Introduction to Analysis | Chap. 2 | Lectures covered by Prof.Davis. See Lecture Notes for details.|
|3|Sep 21| Lists, Stacks, Queues | Chap. 3 | Hw1 due Sep 21 |
|4|Sep 28| Trees | Chap. 4 | Hw2 due Sep 30  |
|5|Oct 5| Trees (contd) | Chap. 4 | |
|6|Oct 12| !Review / Midterm | | Review on Tue / Midterm on Thu, Hw3 due Oct 14 |
|7|Oct 19 (+1)| Trees (contd) | Chap. 4 | Note: (+1) means the schedule moves back a week |
|8|Oct 26 (+1)| Hashing | Chap. 5 | |
|9|Nov 2|  Hashing (contd) | Chap. 5 | Hw4 due Nov 2 |
|10|Nov 9| Priority Queues | Chap. 6 | |
|11|Nov 16| Priority Queues (contd) |  Chap. 6 | Hw5 (project) due Nov 18 |
|12|Nov 23| Sorting | Chap. 7 | !Thanksgiving on Thu |
|13|Nov 30| Sorting / Implementation | Chaps. 7,12 ||
|14|Dec 7| Implementation | Chap.12 ||
|15|Dec 14| Review | | Tue is last lecture (NYU Legislative Day)  |
|16|Dec 17-23 | !Final Exam Week | | |f
|Tentative Outline|c
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">><<slider chkSliderContents [[TabContents]] 'contents »' 'contents'>>
/%<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>%/
Fall 2010, V22.0201.00X (X=1,2,3)
Data Structures Course
* General  [[Collection | http://cs.nyu.edu/~yap/prog/]] of useful free tools.
: Let me know if something is severely in need of update.   
: Following are direct links to some of them.
* [[Java | http://cs.nyu.edu/~yap/prog/java]]:
: Of course, this is the required programming language for this course.
* [[Gvim Editor | http://cs.nyu.edu/~yap/prog/vi]]:
: It is vital to learn a non-WYSIWYG editor if you are serious about programming.  My favorite is gvim, but many people like emacs. 
* [[Make Program | http://cs.nyu.edu/~yap/prog/make]]:
: This simple tool will make programming less tedious, and a window into related productivity tools.
* [[Tar Program | http://cs.nyu.edu/~yap/prog/tar]]:
: You need this to submit programming assignments.
*  [[Cygwin | http://cs.nyu.edu/~yap/prog/cygwin]]:
: Cygwin is the painless way to get a unix-like environment on Windows
* [[ Eclipse | http://cs.nyu.edu/~yap/prog/eclipse]]: to be added
: Eclipse is one of many IDE (integrated development environments) but one of the most widely used.
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
;Required Text Book:
: Data Structures & Algorithm Analysis in JAVA (2nd Edition)  By Mark Allen Weiss Published by Addison-Wesley, 2007
!!!Tiddly Wiki Help (Local)
*''Starting'':  [[BeforeYouStart]] | [[GettingStarted]]
*''Shadow Tiddlers'': [[MainMenu]] | [[DefaultTiddlers]] | [[SiteTitle]] | [[SiteSubtitle]] | [[PluginManager]]
*''My Markup Notes'': [[MarkUpNotes]] | [[TopicsNotes]]

!!!Tiddly Wiki Help (External)
*''Tiddly.Com'': [[Home Page|http://www.tiddlywiki.com/]]
*''Tiddly.Org'': [[Markup|http://tiddlywiki.org/wiki/TiddlyWiki_Markup]]
*''TiddlyTools'': [[Home Page|http://www.tiddlytools.com/]] | [[NotesOnTiddlyTools]]
*''TiddlySpot.Com'' : [[Home Page|http://tiddlyspot.com/]] | [[TW Help|http://twhelp.tiddlyspot.com/]] | [[TW Help for beginners | http://tiddlyspot.com/twhelp/]] |

You may contribute links to this page -- just send me a note of what you feel
would be helpful to this class.
<<tabs usefulLinks
   [[Click any tab:]] "tips..." [[noTiddler]]
   [[Various Software Tools]] "tips..."  [[Software Tools]]
   [[How are you graded?]] "tips..." [[Grading]]>>

!Contributions and Jokes
[[Computer Science Joke|http://cs.nyu.edu/~yap/classes/fun/stringJavaJoke.jpg]]  from Philippe Juncker... OK, Java Programmers, the joke is on you.
[[Heaps and Trees from xkcd|http://xkcd.com/835]] from Shohan Hasan
Welcome to my Data Structures Course Page !!

If you are registered for my sections (viz., 1, 2 or 3) of this course,
I suggest you begin by sending me at email to say hello,
to introduce yourself.   Just say zero or more words
about your self (e.g., what you look forward
to in this course).  I will be sure to respond to you.

If you are curious about the technology behind this webpage,
you may click this link:  [[About this document|About this document]].

- - - Chee Yap
> For an introduction to ~TiddlyWiki, please look (for example) at [[tiddlywiki.org's introduction|http://tiddlywiki.org/wiki/Introduction]]. The term '"wiki" should be familiar from the ubiquitous "wikipedia".  Indeed, there are many variant wiki technologies, and "wikipedia" itself uses the variant called ''~MediaWiki''.  Another one I have used is called ''~PmWiki'' (see my [[PmWiki|http://cs.nyu.edu/~yap/wiki/pm/]] site).