WIPRO CONFIDENTIAL Agenda

Total Page:16

File Type:pdf, Size:1020Kb

WIPRO CONFIDENTIAL Agenda Data structures and Program Design By FCG Team WIPRO CONFIDENTIAL Agenda § Introduction to Data Structures § Array as a Data Structure § Linked List – Definition and Implementation § Introduction to data structures related to linked lists and arrays Ÿ Doubly linked lists Ÿ Circular linked lists Ÿ Chunk lists Ÿ Stacks and Queues Ÿ Lookup tables Ÿ Hash tables Ÿ Associative arrays Ÿ Circular buffers Ÿ Dynamic arrays § Binary trees § Graphs § Examples of choosing data structures WIPRO CONFIDENTIAL 2 Prerequisites § Basics of C § Basic Understanding of Pointers § Basic Understanding of recursion § Some Understanding of Search and Sort techniques WIPRO CONFIDENTIAL 3 Data Structure Introduction § Take the example of a text processing program. § One of the requirement is to sort a list of words. § How would you design your program to perform this function? § Specifically how would you store the data for this program? W1 W2 W3 W4 W5 W6 W2 W5 W3 W4 W1 W6 WIPRO CONFIDENTIAL 4 What is a Data structure § A structured way of organizing a collection of data elements, which are related to each other. § A Data structure is also defined by Ÿ a set of defined operations on the structure, which determines how the data is processed. § Given a collection of data elements, there can be several ways that it can be organized, i.e a programmer can chose to represent the data with different types of data structures. § Choosing an appropriate data structure for your program depends on Ÿ How the input set of data is interrelated, Ÿ What are the data processing requirements, Ÿ What are the program constraints in terms of time and space. WIPRO CONFIDENTIAL 5 Importance of Data structures § The processing stage of a program revolves around the data structure. § Typically, if data structure chosen correctly, the rest of the logic will fall in place. § Frequently Used Data structures: Ÿ Arrays/Tables Ÿ Stack Ÿ Link list (singly linked list, doubly linked list) Ÿ Tree § The basic data structures can be combined to form more complex data structures Ÿ Arrays & Link list can be combined to form data structures like chunk list, hashed list, etc. § Selecting wrong data structure would result in Ÿ processing stage becoming unnecessarily complex and buggy WIPRO CONFIDENTIAL 6 Data structures – Algorithms and implementation § For each of the data structures, there are standard algorithms available for Ÿ parsing Ÿ Searching Ÿ Sorting § Combining these algorithms, several derived algorithms exist for Ÿ Splitting Ÿ Merging § Implementation of Data structures generally uses program defined basic data types along with references/pointers and structures/unions. WIPRO CONFIDENTIAL 7 Array as a Data Structure § Stores collection of elements of the same type. § the entire array is allocated as one contiguous block of memory. § Only defining operation for an array is : Indexing. § Static and Dynamically allocated arrays: Ÿ Static arrays are allocated at compile time Ÿ Dynamically allocated arrays are allocated at run time § Fixed size arrays: Ÿ Static arrays: at compile time Ÿ Dynamically allocated: size can be determined at runtime, but once declared it most often remains fixed. § Dynamic Arrays: Ÿ You can dynamically allocate an array in the heap, and resize it with realloc() call. Ÿ Managing a heap block in this way is fairly complex, but can have excellent efficiency for storage and iteration. Ÿ if continuous free memory is not available, realloc will copy the old block to new block and return the pointer to new block. This makes realloc expensive. WIPRO CONFIDENTIAL 8 Advantages and Disadvantages of an array § Pros Ÿ Access to an array element is convenient and fast w Any element can be accessed directly using the [ ] syntax. w Array access is almost always implemented using fast address arithmetic: the address of an element is computed as an offset from the start of the array which only requires one multiplication and one addition. Ÿ Because arrays are contiguous, processing of sequential data stored in an array can make best use of memory caches. § Cons Ÿ Because of the fixed size restriction on an array, most often programmers tend to allocate an array that is “large enough”, which tends to either waste memory for most occasions and crash for special out of bounds cases. Ÿ When large arrays are used as local variables, the stack space becomes unmanageable. Ÿ Inserting/Deleting new elements at the front or middle of an array is potentially expensive because existing elements need to be shifted over to make room. WIPRO CONFIDENTIAL 9 Linked Lists § List of nodes at non-contiguous memory locations in the heap, to each other through pointers/links § Need to keep track of the head of the list to be able to traverse the list § Size of the list varies dynamically during the execution of the program § Typical operations are Insertion, Deletion and Searching DATA NP typedef struct node { int data; struct node* next; Stack/Data }NODE_TYPE; Heap Segment Head 1 2 3 A “head” pointer local to function or global, keeps Each node the whole list by storing Each node stores stores one a pointer to the first one next pointer. node. data element WIPRO(int in CONFIDENTIALthis example). 10 Linked Lists – Insert at beginning of list 2 8 10 4 6 3 2 5 head head head 2 2 Allocate memory for a new node. Dummy head Assign data Set next of new node to next of head X Update head of next to point to the new node head head X 2 X 8 2 WIPRO CONFIDENTIAL 8 11 Linked Lists - Code List Initialize() head { Node* temp; X temp = (Node*)malloc(sizeof(Node)); return temp; } head X 2 void InsertBegin(List head,int d) { Node* temp; temp = (Node*)malloc(sizeof(Node)); main() temp->data = d; { List head; temp->next = head->next; head = Initialize(); head->next = temp; InsertBegin(head, 2); } WIPRO CONFIDENTIAL} 12 Linked Lists – Insert at any point in the list 2 8 1 4 10 3 6 5 Allocate memory for a new node. head Insert point Assign data Find the insert point after which the new X 8 2 node has to be inserted Set next of new node to next of insert point 1 Update next of insert point to point to the new node head Insert point X 8 2 1 4 head X 8 4 2 1 10 WIPRO CONFIDENTIAL 13 Linked Lists - Delete head prev del X 10 2 4 8 head prev del X 10 4 8 head Identify ‘del’, the node to be deleted X 10 4 Store this in temp Modify its previous pointer to point del->next Free the memory pointed by temp head X 4 WIPRO CONFIDENTIAL 14 Linked Lists – Pros and Cons § Pros Ÿ Optimal Memory Usage, when no of elements is not fixed at compile time. Ÿ It is easier to do insertions and deletions at any random point in the list. § Cons Ÿ Iteration is costlier because of non-contiguous storage. Ÿ Optimal only for sequential processing of elements. Ÿ Extra storage needed for references, which often makes them impractical for small lists of small data items Ÿ Locality of data is poor. Linked list data elements do not make the best use of memory caches. WIPRO CONFIDENTIAL 15 Linked Lists - Exercise • Write code to implement a phone book as found in a mobile phone •Add new entry •Edit existing entry •Delete an entry • The user should be able to search for the relevant details based on the name. • The details to be stored in an entry are: • Name of the person • Mobile number • Landline number • A text section of 128 bytes to store some notes or address related to the entry • The program should flag a warning if a new entry is being attempted with an existing name and add the new details to the existing name. •Given a linked-list write a function reverse() that reverses its contents - reverse(List* head) - At the end of call to this function head should be pointing to the last node in the list that was passed to it andWIPRO its contents CONFIDENTIAL should be reversed. -This program should not allocate memory for any additional nodes. 16 Arrays or Linked Lists? Chose to use an Array when - § Random access of elements is a requirement. § Maximum number of elements is known. § Program performance w.r.t time is more important than w.r.t to memory. § During most of the runtime, the array elements are all occupied with valid values, so that there is no wastage of memory. § There is no need to insert elements in the beginning or middle of list. Insertion is needed only at end of list. § There are no deletions required. Chose a linked list when – § Maximum number of elements is not known. § Access of elements is mostly sequential. Frequent insertions and deletions at any point in the list is required. § Performance in termsWIPRO of memory CONFIDENTIAL is critical more than in terms of time. 17 Related Data Structures § Doubly-Linked lists: Ÿ Each node has both a next and prev pointer, so that the list can be traversed in both the directions. Insertions and deletions are easier in this list, since there is no need to track a previous pointer. Ÿ Use this when there is a need to frequently parse the list in both directions sequentially, this can be used commonly in editors, which requires parsing the cursor in both directions. HEAD HEAD 1 2 3 1 2 3 •Circular lists: • The last node is connected back to the first node. Use this for naturally circular data relation. • Instead of needing a fixed head end, any pointer into the list will do.
Recommended publications
  • Application of TRIE Data Structure and Corresponding Associative Algorithms for Process Optimization in GRID Environment
    Application of TRIE data structure and corresponding associative algorithms for process optimization in GRID environment V. V. Kashanskya, I. L. Kaftannikovb South Ural State University (National Research University), 76, Lenin prospekt, Chelyabinsk, 454080, Russia E-mail: a [email protected], b [email protected] Growing interest around different BOINC powered projects made volunteer GRID model widely used last years, arranging lots of computational resources in different environments. There are many revealed problems of Big Data and horizontally scalable multiuser systems. This paper provides an analysis of TRIE data structure and possibilities of its application in contemporary volunteer GRID networks, including routing (L3 OSI) and spe- cialized key-value storage engine (L7 OSI). The main goal is to show how TRIE mechanisms can influence de- livery process of the corresponding GRID environment resources and services at different layers of networking abstraction. The relevance of the optimization topic is ensured by the fact that with increasing data flow intensi- ty, the latency of the various linear algorithm based subsystems as well increases. This leads to the general ef- fects, such as unacceptably high transmission time and processing instability. Logically paper can be divided into three parts with summary. The first part provides definition of TRIE and asymptotic estimates of corresponding algorithms (searching, deletion, insertion). The second part is devoted to the problem of routing time reduction by applying TRIE data structure. In particular, we analyze Cisco IOS switching services based on Bitwise TRIE and 256 way TRIE data structures. The third part contains general BOINC architecture review and recommenda- tions for highly-loaded projects.
    [Show full text]
  • CS 106X, Lecture 21 Tries; Graphs
    CS 106X, Lecture 21 Tries; Graphs reading: Programming Abstractions in C++, Chapter 18 This document is copyright (C) Stanford Computer Science and Nick Troccoli, licensed under Creative Commons Attribution 2.5 License. All rights reserved. Based on slides created by Keith Schwarz, Julie Zelenski, Jerry Cain, Eric Roberts, Mehran Sahami, Stuart Reges, Cynthia Lee, Marty Stepp, Ashley Taylor and others. Plan For Today • Tries • Announcements • Graphs • Implementing a Graph • Representing Data with Graphs 2 Plan For Today • Tries • Announcements • Graphs • Implementing a Graph • Representing Data with Graphs 3 The Lexicon • Lexicons are good for storing words – contains – containsPrefix – add 4 The Lexicon root the art we all arts you artsy 5 The Lexicon root the contains? art we containsPrefix? add? all arts you artsy 6 The Lexicon S T A R T L I N G S T A R T 7 The Lexicon • We want to model a set of words as a tree of some kind • The tree should be sorted in some way for efficient lookup • The tree should take advantage of words containing each other to save space and time 8 Tries trie ("try"): A tree structure optimized for "prefix" searches struct TrieNode { bool isWord; TrieNode* children[26]; // depends on the alphabet }; 9 Tries isWord: false a b c d e … “” isWord: true a b c d e … “a” isWord: false a b c d e … “ac” isWord: true a b c d e … “ace” 10 Reading Words Yellow = word in the trie A E H S / A E H S A E H S A E H S / / / / / / / / A E H S A E H S A E H S A E H S / / / / / / / / / / / / A E H S A E H S A E H S / / / / / / /
    [Show full text]
  • Introduction to Linked List: Review
    Introduction to Linked List: Review Source: http://www.geeksforgeeks.org/data-structures/linked-list/ Linked List • Fundamental data structures in C • Like arrays, linked list is a linear data structure • Unlike arrays, linked list elements are not stored at contiguous location, the elements are linked using pointers Array vs Linked List Why Linked List-1 • Advantages over arrays • Dynamic size • Ease of insertion or deletion • Inserting a new element in an array of elements is expensive, because room has to be created for the new elements and to create room existing elements have to be shifted For example, in a system if we maintain a sorted list of IDs in an array id[]. id[] = [1000, 1010, 1050, 2000, 2040] If we want to insert a new ID 1005, then to maintain the sorted order, we have to move all the elements after 1000 • Deletion is also expensive with arrays until unless some special techniques are used. For example, to delete 1010 in id[], everything after 1010 has to be moved Why Linked List-2 • Drawbacks of Linked List • Random access is not allowed. • Need to access elements sequentially starting from the first node. So we cannot do binary search with linked lists • Extra memory space for a pointer is required with each element of the list Representation in C • A linked list is represented by a pointer to the first node of the linked list • The first node is called head • If the linked list is empty, then the value of head is null • Each node in a list consists of at least two parts 1.
    [Show full text]
  • Programmer's Guide
    Programmer’s Guide Release 2.2.0 January 16, 2016 CONTENTS 1 Introduction 1 1.1 Documentation Roadmap...............................1 1.2 Related Publications..................................2 2 Overview 3 2.1 Development Environment..............................3 2.2 Environment Abstraction Layer............................4 2.3 Core Components...................................4 2.4 Ethernet* Poll Mode Driver Architecture.......................6 2.5 Packet Forwarding Algorithm Support........................6 2.6 librte_net........................................6 3 Environment Abstraction Layer7 3.1 EAL in a Linux-userland Execution Environment..................7 3.2 Memory Segments and Memory Zones (memzone)................ 11 3.3 Multiple pthread.................................... 12 3.4 Malloc.......................................... 14 4 Ring Library 19 4.1 References for Ring Implementation in FreeBSD*................. 20 4.2 Lockless Ring Buffer in Linux*............................ 20 4.3 Additional Features.................................. 20 4.4 Use Cases....................................... 21 4.5 Anatomy of a Ring Buffer............................... 21 4.6 References....................................... 28 5 Mempool Library 31 5.1 Cookies......................................... 31 5.2 Stats.......................................... 31 5.3 Memory Alignment Constraints............................ 31 5.4 Local Cache...................................... 32 5.5 Use Cases....................................... 33 6
    [Show full text]
  • University of Cape Town Declaration
    The copyright of this thesis vests in the author. No quotation from it or information derived from it is to be published without full acknowledgementTown of the source. The thesis is to be used for private study or non- commercial research purposes only. Cape Published by the University ofof Cape Town (UCT) in terms of the non-exclusive license granted to UCT by the author. University Automated Gateware Discovery Using Open Firmware Shanly Rajan Supervisor: Prof. M.R. Inggs Co-supervisor: Dr M. Welz University of Cape Town Declaration I understand the meaning of plagiarism and declare that all work in the dissertation, save for that which is properly acknowledged, is my own. It is being submitted for the degree of Master of Science in Engineering in the University of Cape Town. It has not been submitted before for any degree or examination in any other university. Signature of Author . Cape Town South Africa May 12, 2013 University of Cape Town i Abstract This dissertation describes the design and implementation of a mechanism that automates gateware1 device detection for reconfigurable hardware. The research facilitates the pro- cess of identifying and operating on gateware images by extending the existing infrastruc- ture of probing devices in traditional software by using the chosen technology. An automated gateware detection mechanism was devised in an effort to build a software system with the goal to improve performance and reduce software development time spent on operating gateware pieces by reusing existing device drivers in the framework of the chosen technology. This dissertation first investigates the system design to see how each of the user specifica- tions set for the KAT (Karoo Array Telescope) project in [28] could be achieved in terms of design decisions, toolchain selection and software modifications.
    [Show full text]
  • The Hitchhiker's Guide to Data Structures
    The Hitchhiker’s Guide to Data Structures University of Rochester Nathan Contino March 2, 2017 Abstract Introductory computer science students often have considerable difficulty extracting infor- mation from data structures textbooks with rather dense writing styles. These textbooks are usually intended to cover subjects comprehensively, but seldom focus on keeping content comprehensible. While this commitment to data preservation is admirable at heart, the author of this paper feels that we can do a better job for introductory students by attempting to balance comprehensibility and comprehensiveness. The Hitchhiker’s Guide to Data Structures is an attempt to present data structures to introductory computer science students in this more friendly manner. Contents 1 Forward 2 2 Introduction 2 2.1 A Note on Running Time . .3 2.2 A Note on Pointers and Values. .5 3 The Proto-Structures 6 3.1 Nodes . .6 3.2 Linked Lists . .8 3.3 Arrays . 13 3.4 Strings . 16 4 Where Things Start to Get Complicated 18 4.1 Doubly-Linked Lists . 18 4.2 Stacks . 22 4.3 Queues . 25 4.4 Trees . 28 4.5 Binary Search Trees . 33 5 Advanced Data Structures 37 5.1 AVL Trees . 37 5.2 Binary Heaps . 40 5.3 Graphs . 42 5.4 Hash Tables . 45 6 Summary 47 1 1 Forward While the purpose of this work seems simple, it has actually turned out to be rather difficult to convey. So we’ll try to illustrate it clearly here in a single brief sentence: this paper is designed specifically as a guide to data structures for keen, interested students at the introductory level of computer science.
    [Show full text]
  • Linux Kernel and Driver Development Training Slides
    Linux Kernel and Driver Development Training Linux Kernel and Driver Development Training © Copyright 2004-2021, Bootlin. Creative Commons BY-SA 3.0 license. Latest update: October 9, 2021. Document updates and sources: https://bootlin.com/doc/training/linux-kernel Corrections, suggestions, contributions and translations are welcome! embedded Linux and kernel engineering Send them to [email protected] - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 1/470 Rights to copy © Copyright 2004-2021, Bootlin License: Creative Commons Attribution - Share Alike 3.0 https://creativecommons.org/licenses/by-sa/3.0/legalcode You are free: I to copy, distribute, display, and perform the work I to make derivative works I to make commercial use of the work Under the following conditions: I Attribution. You must give the original author credit. I Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. I For any reuse or distribution, you must make clear to others the license terms of this work. I Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above. Document sources: https://github.com/bootlin/training-materials/ - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 2/470 Hyperlinks in the document There are many hyperlinks in the document I Regular hyperlinks: https://kernel.org/ I Kernel documentation links: dev-tools/kasan I Links to kernel source files and directories: drivers/input/ include/linux/fb.h I Links to the declarations, definitions and instances of kernel symbols (functions, types, data, structures): platform_get_irq() GFP_KERNEL struct file_operations - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 3/470 Company at a glance I Engineering company created in 2004, named ”Free Electrons” until Feb.
    [Show full text]
  • 4 Hash Tables and Associative Arrays
    4 FREE Hash Tables and Associative Arrays If you want to get a book from the central library of the University of Karlsruhe, you have to order the book in advance. The library personnel fetch the book from the stacks and deliver it to a room with 100 shelves. You find your book on a shelf numbered with the last two digits of your library card. Why the last digits and not the leading digits? Probably because this distributes the books more evenly among the shelves. The library cards are numbered consecutively as students sign up, and the University of Karlsruhe was founded in 1825. Therefore, the students enrolled at the same time are likely to have the same leading digits in their card number, and only a few shelves would be in use if the leadingCOPY digits were used. The subject of this chapter is the robust and efficient implementation of the above “delivery shelf data structure”. In computer science, this data structure is known as a hash1 table. Hash tables are one implementation of associative arrays, or dictio- naries. The other implementation is the tree data structures which we shall study in Chap. 7. An associative array is an array with a potentially infinite or at least very large index set, out of which only a small number of indices are actually in use. For example, the potential indices may be all strings, and the indices in use may be all identifiers used in a particular C++ program.Or the potential indices may be all ways of placing chess pieces on a chess board, and the indices in use may be the place- ments required in the analysis of a particular game.
    [Show full text]
  • Tricore Architecture Manual for a Detailed Discussion of Instruction Set Encoding and Semantics
    User’s Manual, v2.3, Feb. 2007 TriCore 32-bit Unified Processor Core Embedded Applications Binary Interface (EABI) Microcontrollers Edition 2007-02 Published by Infineon Technologies AG 81726 München, Germany © Infineon Technologies AG 2007. All Rights Reserved. Legal Disclaimer The information given in this document shall in no event be regarded as a guarantee of conditions or characteristics (“Beschaffenheitsgarantie”). With respect to any examples or hints given herein, any typical values stated herein and/or any information regarding the application of the device, Infineon Technologies hereby disclaims any and all warranties and liabilities of any kind, including without limitation warranties of non- infringement of intellectual property rights of any third party. Information For further information on technology, delivery terms and conditions and prices please contact your nearest Infineon Technologies Office (www.infineon.com). Warnings Due to technical requirements components may contain dangerous substances. For information on the types in question please contact your nearest Infineon Technologies Office. Infineon Technologies Components may only be used in life-support devices or systems with the express written approval of Infineon Technologies, if a failure of such components can reasonably be expected to cause the failure of that life-support device or system, or to affect the safety or effectiveness of that device or system. Life support devices or systems are intended to be implanted in the human body, or to support and/or maintain and sustain and/or protect human life. If they fail, it is reasonable to assume that the health of the user or other persons may be endangered. User’s Manual, v2.3, Feb.
    [Show full text]
  • JS and the DOM
    Back to the client side: JS and the DOM 1 Introduzione alla programmazione web – Marco Ronchetti 2020 – Università di Trento Q What are the DOM and the BOM? 2 Introduzione alla programmazione web – Marco Ronchetti 2020 – Università di Trento JS and the DOM When a web page is loaded, the browser creates a Document Object Model of the page, which is as a tree of Objects. Every element in a document—the document as a whole, the head, tables within the document, table headers, text within the table cells—is part of its DOM, so they can all be accessed and manipulated using the DOM and a scripting language like JavaScript. § With the object model, JavaScript can: § change all the HTML [elements, attributes, styles] in the page § add or remove existing HTML elements and attributes § react to HTML events in the page § create new HTML events in the page 3 Introduzione alla programmazione web – Marco Ronchetti 2020 – Università di Trento Using languages implementations of the DOM can be built for any language: e.g. Javascript Java Python … But Javascript is the only one that can work client-side. 4 Introduzione alla programmazione web – Marco Ronchetti 2020 – Università di Trento Q What are the fundamental objects in DOM/BOM? 5 Introduzione alla programmazione web – Marco Ronchetti 2020 – Università di Trento Fundamental datatypes - 1 § Node Every object located within a document is a node. In an HTML document, an object can be an element node but also a text node or attribute node. § Document (is-a Node) § the root document object itself.
    [Show full text]
  • FSS) in Oracle Cloud Infrastructure
    Everyone Loves File: File Storage Service (FSS) in Oracle Cloud Infrastructure Bradley C. Kuszmaul Matteo Frigo Justin Mazzola Paluska Alexander (Sasha) Sandler Oracle Corporation Abstract 100 MB=s of bandwidth and 3000 operations per sec- ond for every terabyte stored. Customers can mount a File Storage Service (FSS) is an elastic filesystem pro- filesystem on an arbitrary number of NFS clients. The vided as a managed NFS service in Oracle Cloud In- size of a file or filesystem is essentially unbounded, lim- frastructure. Using a pipelined Paxos implementation, ited only by the practical concerns that the NFS pro- we implemented a scalable block store that provides lin- tocol cannot cope with files bigger than 16 EiB and earizable multipage limited-size transactions. On top of that we would need to deploy close to a million hosts the block store, we built a scalable B-tree that provides to store multiple exabytes. FSS provides the ability linearizable multikey limited-size transactions. By us- to take a snapshot of a filesystem using copy-on-write ing self-validating B-tree nodes and performing all B- techniques. Creating a filesystem or snapshot is cheap, tree housekeeping operations as separate transactions, so that customers can create thousands of filesystems, each key in a B-tree transaction requires only one page each with thousands of snapshots. The system is robust in the underlying block transaction. The B-tree holds against failures since it synchronously replicates data the filesystem metadata. The filesystem provides snap- and metadata 5-ways using Paxos [44]. shots by using versioned key-value pairs.
    [Show full text]
  • Project 0: Implementing a Hash Table
    CS165: DATA SYSTEMS Project 0: Implementing a Hash Table CS 165, Data Systems, Fall 2019 Goal and Motivation. The goal of Project 0 is to help you develop (or refresh) basic skills at designing and implementing data structures and algorithms. These skills will be essential for following the class. Project 0 is meant to be done prior to the semester or during the early weeks. If you are doing it before the semester feel free to contact the staff for any help or questions by coming to the office hours or posting in Piazza. We expect that for most students Project 0 will take anything between a few days to a couple of weeks, depending in the student’s background on the above areas. If you are having serious trouble navigating Project 0 then you should reconsider the decision to take CS165. You can expect the semester project to be multiple orders of magnitude more work and more complex. How much extra work is this? Project 0 is actually designed as a part of the fourth milestone of the semester project. So after finishing Project 0 you will have refreshed some basic skills and you will have a part of your project as well. Basic Project Description. In many computer applications, it is often necessary to store a collection of key-value pairs. For example, consider a digital movie catalog. In this case, keys are movie names and values are their corresponding movie descriptions. Users of the application look up movie names and expect the program to fetch their corresponding descriptions quickly.
    [Show full text]