Data Structures and Algorithm (CSD201)
Vietnamese title: Cấu trúc dữ liệu và giải thuật
Credits: 3
Prerequisites: PRO192

Description:
Upon finishing the course, students can:
1) Knowledge: Understand (ABET e)
- the connection between data structures and their algorithms, including an analysis of algorithms' complexity;
- data structurre in the context of object-oriented program design;
- how data structure are implemented in an OO programming language such as Java
2) Able to (ABET e)
- organize and manipulate basic structures: array, linked list, tree, heap, hash
- use algorithms for traversing, sorting, searching on studying structures
- select a suitable algorithm to solve a practical problem
3) Able to (ABET k)
- use JAVA programming language for solving some problems
- use Eclipse tool for developing programs in JAVA
- Implement some programs in JAVA to solve practical problems based on the studying algorithms
4) Others: (ABET i)
- Improve study skills (academic reading, information searching, ...)

Learning outcomes:
Describe the list data structure and its’ different way of implementations. Implement the singly linked list. LO1.1 Demonstrate the list data structure with basic operations: insert, remove, edit, search, sort,... LO1.2 Explain two ways of implementing a list: using arrays and using linked lists. LO1.3 Write programs to implement the singly linked list with basic operations: add (last, first, before, after, at position), search, edit, remove, reverse, sort... ) LO1.4 Understand the doubly linked-list data structure with basic operations. LO1.5 Write code snippets which manipulate operations on doubly linked list, and use diagrams to illustrate the effect. LO1.6 Describe the circularly linked-list data structure with some basic operations like add, remove. LO1.7 Expain why the Java code library provides the ArrayList and LinkedList classes
Define stack and queue. Describe basic operations and the use of these structures. LO2.1 Define stack and queue. LO2.2 List and demonstrate the operations common to stacks and queues. LO2.3 Describe specific tasks to which stacks and queues are suited. LO2.4 Apply stacks to a specific application. LO2.5 Apply queues to a specific application. LO2.6 Write programs to implement stack and queue in Java programming language. LO2.7 Define and explain the need of priority queue.
Describe about recursive definitions, algorithms, functions and their implementation and use. LO3.1 Describe the basic ideas of recursion and how to set up recursive systems that represent certain real-world phenomena. LO3.2 Know how to develop recursive algorithms and programs LO3.3 Write programs in Java using recursion to solve some problems, like creating the Fibonacci sequence. LO3.4 Analyse a recursive function to find out its’ ouput without running. LO3.5 Explain type of recursive functions, give examples and comparing them. LO3.6 Compare recursion with iteration, analyzes their pros and cons
Explain about general tree, Binary Tree and Binary Search Tree (BST). Implement BST with basic operations. LO4.1 Define general tree, Binary Tree and Binary Search Tree (BST). LO4.2 Given a BST and a sequence of insert and delete operations on it, draw the resulted tree. LO4.3 Find the smallest and largest elements, number of nodes in a tree and its’ height. LO4.4 Write code to implement features of a binary search tree, such as insertion, deletion, searching, traversals, nodes and height calculation, rotation ... LO4.5 Derive the time complexities for the above operations on a binary search tree. LO4.6 Compare a binary search tree over other data structures that we have discussed in class. LO4.7 Identify applications where a binary search tree will be useful. LO4.8 Define balanced BST and explane simple balancing algorithm. LO4.9 Define AVL Tree and explain by examples the insertion and deletion operations in it. LO5.10 Define heap and explain its’ application.
Díscuss about graphs and their application. Implement a graph with some basic operations. LO5.1 Demonstrate graphs and their applications. Define an undirected graph and directed graph. LO5.2 Explain basic notions about a graph: vertex, edge, adjacent vertices, incident edge,... LO5.3 Know how to represent a graph using matrix and list LO5.4 Able to apply BFS and DFS to traverse a graph LO5.5 Write prorams to implement Graph with BFS and DFS traversals using Java LO5.6 Explain the shortest path problem and Dijkstra’ algorithm. LO5.7 Write program in Java to implement Dijkstra’s shortest path algorithm. LO5.8 Define the minimum spanning tree and using the Kruskal’s algorithm to find it. LO5.9 Define Euler cycle/path and the necessary and sufficient conditions for their existance. LO5.10 Explain the algorithm to find Euler path / circuit using Stack and implement it in Java lannguage. LO5.11 Define Halmilton cycle/path and able to determine them using backtracking algorithm. LO5.12 Demonstrate the graph coloring and can apply Sequential coloring algorithm to color a graph.
Explain the operation and performance of some basic and advanced sorting alggorithms LO6.1 Explain the operation and performance of selection sort applying to arrays. LO6.2 Explain the operation and performance of insertion sort applying to arrays. LO6.3 Explain the operation and performance of bubble sort applying to arrays. LO6.4 Explain the operation and performance of quick sort applying to arrays. LO6.5 Explain the operation and performance of merge sort applying to arrays. LO6.6 Explain the operation and performance of heap sort applying to arrays. LO6.7 Demonstrate the operation and performance of radix sort.
Explain about hashing and application LO7.1 Explain the concept of "hash". Define concepts hash function and hash table and their application. LO7.2 Demonstrate the types of hash functions: Division, Folding,... LO7.2 Explain the collision and collision-handling. LO7.3 Explain the open addressing method for collision-resolution: lear and quadratic probing. LO7.4 Explain the chaining method for collision-resolution: separate chaining and Coalesced chaining. LO7.5 Define perfect hash function and extendible hashing.
Describe the Text Processing problem and its’ application. Explain the Huffman, LZW and Run-length encoding Algorithms. LO8.1 Describe the Text Processing problem and its’ application. LO8.2 Explain the Brute Force Text Pattern-Matching algorithm LO8.3 Describe the main idea of The Knuth-Morris-Pratt Algorithm LO8.4 Explain The Huffman Coding Algorithm. LO8.5 Explain steps needed to use The Huffman Coding Algorithm for compressing a text file. LO8.6 Explain the LZW encoding algorithm. LO8.7 Explain the Run-length encoding algorithm.

Student tasks:
- Students must attend at least 80% of contact sessions in order to be accepted to the final examination.
- Student is responsible to do all exercises given by instructor in class or at home and submit on time
- Promptly access to the https://flm.fpt.edu.vn/ for up-to-date course information

Tools:

Materials:
description: Michaelt T. Goodrich, Roberto Tamassia, Michael H. Goldwasser: Data Structures and Algorithms in Java, 6th Edition, 2014
author: Michaelt T. Goodrich, Roberto Tamassia, Michael H. Goldwasser
publisher: Wiley
published_date: 2014
edition: 6th
isbn: 978-1-118-77133-4
note: Sách online (Wiley platform)
description: FU slides (ppt)
description: FU exercises (pdf)
description: Code files for students (java files)

Assessments:
category: Progress test (PT)
type: quiz
weight: 20.0
duration: Option 1: 20'-40' Option 2 (For Constructivism Approach only): Follow lecturer's proposal
no_question: Option 1: essay or multiple choice Option 2 (For Constructivism Approach only): Follow lecturer's proposal
knowledge_and_skill: Option 1: 15-30 if multiple choice Option 2 (For Constructivism Approach only): Follow lecturer's proposal
grading_guide: PT 1
LO1 - LO4
PT 2
LO5 - LO8
Number of questions:
3-8 for each LOx
note: on paper or
using computer
category: Assignment (AS)
type: on-going
weight: 20.0
duration: Option 1: at home Option 2 (For Constructivism Approach only): Follow lecturer's proposal
no_question: Option 1: a problem similar to real one Option 2 (For Constructivism Approach only): Follow lecturer's proposal
knowledge_and_skill: Option 1: 1 Option 2 (For Constructivism Approach only): Follow lecturer's proposal
grading_guide: AS1: LO1 - LO3
AS2: LO4-LO6
note: Individual or team work, guided by instructor, submission by a given deadline
category: Practical Exam
type: practical exam
weight: 30.0
duration: 85'
no_question: Preferable to be marked by scripts
knowledge_and_skill: 1-2 small problems
grading_guide: problem(s) to solve by programming (LO1, LO2, LO4, LO6)
note: supervised by proctor(s) sent by exam board
category: Final exam
type: Final exam
weight: 30.0
duration: 60'
no_question: multiple choice
knowledge_and_skill: 50
grading_guide: questions distribution:
LO1.x: 5 - 8
LO2.x: 5 - 8
LO3.x: 3 - 7
LO4.x: 5 - 10
LO5.x: 5 - 8
LO6.x: 3 - 5
LO7.x: 3 - 5
LO8.x: 3 - 5

more than 70% new questions (for the current semester);
note: supervised by proctor(s) sent by exam board

Schedule:
session: Course Introduction

1.1. Using Arrays
1.2. Singly Linked Lists
learning_outcomes: IT
materials: CSD201
session: 1.3. Circularly Linked Lists
1.4. Doubly Linked Lists
learning_outcomes: IT
materials: CSD201
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 2.1 Stacks
learning_outcomes: ITU
session: Guiding Exercises/Assignment
learning_outcomes: ITU
session: 2.2 Queues
2.3 Double-Ended Queues (Deque)
learning_outcomes: T
session: 2.4 The Priority Queue
learning_outcomes: T
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 3.1 Illustrative Examples
3.1.1 The Factorial Function
3.1.2 Binary Search
3.1.3 File Systems
learning_outcomes: IT
session: 3.2 Analyzing Recursive Algorithms
3.3 Further Examples of Recursion
3.3.1 Linear Recursion
3.3.2 Binary Recursion
3.3.3 Multiple Recursion
3.4 Designing Recursive Algorithms
3.5 Eliminating Tail Recursion
learning_outcomes: IT
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 4.1 General Trees
4.1.1 Tree Definitions and Properties
4.1.2 The Tree Abstract Data Type
learning_outcomes: T
session: 4.2 Binary Trees
4.2.1 The Binary Tree Abstract Data Type
4.2.2 Properties of Binary Trees
4.3 Implementing Trees
4.4 Tree Traversal Algorithms
learning_outcomes: T
session: Progress test and/or
Review Exercises
Assignment evaluation
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 4.5 Binary Search Trees
4.5.1 Searching Within a Binary Search Tree
learning_outcomes: T
session: 4.5.2 Insertions and Deletions
learning_outcomes: T
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 4.6 Balanced Search Trees
4.7 AVL Trees
learning_outcomes: T
session: 4.8 Heaps
learning_outcomes: T
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: Progress test 1 and review
learning_outcomes: U
session: Review
learning_outcomes: U
session: 5.1 Graphs
5.2 Data Structures for Graphs
5.2.1 Edge List Structure
5.2.2 Adjacency List Structure
5.2.3 Adjacency Matrix Structure
learning_outcomes: IT
session: 5.3 Graph Traversals
5.3.1 Depth-First Search
5.3.3 Breadth-First Search
learning_outcomes: IT
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 5.4 Shortest Paths
5.4.1 Weighted Graphs
learning_outcomes: T
session: 5.4.2 Dijkstra’s Algorithm
learning_outcomes: T
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 5.5 Minimum Spanning Trees
5.5.1 Prim-Jarn´ık Algorithm
learning_outcomes: T
session: 5.5.2 Kruskal’s Algorithm
5.6. Euler's tour and Euler's cycle
learning_outcomes: T
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 6.1 Selection-Sort
6.2 Insertion-Sort
learning_outcomes: IT
session: 6.3 Bubble-sort
6.4 Quick-Sort
learning_outcomes: IT
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 6.5 Merge-Sort
6.6 Heap-Sort
learning_outcomes: T
session: 6.7 Linear-Time Sorting: Bucket-Sort and Radix-Sort
6.8 Comparing Sorting Algorithms
learning_outcomes: T
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 7.1 Hash Tables
7.2 Hash Functions
7.3 Collision-Handling
learning_outcomes: IT
session: 7.4 Load Factors, Rehashing, and Efficiency
7.5 Java Hash Table Implementation
learning_outcomes: IT
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Guiding Exercises/Assignment
learning_outcomes: U
session: 8.1 Abundance of Digitized Text
8.2 Pattern-Matching Algorithms
8.2.1 Brute Force
8.2.2 The Knuth-Morris-Pratt Algorithm
learning_outcomes: IT
session: 8.3 Text Compression
8.3.1 The Huffman Coding Algorithm
8.3.2 The LZW Algorithm
8.3.3 The Run-length Encoding Algorithm
learning_outcomes: IT
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Progress test and/or
Review Exercises
learning_outcomes: U
session: Assignment evaluation
session: Assignment evaluation
session: Progress test 2 and review
session: Review