This document discusses double-ended queues or deques. Deques allow elements to be added or removed from either end. There are two types: input restricted deques where elements can only be inserted at one end but removed from both ends, and output restricted deques where elements can only be removed from one end but inserted from both ends. Deques can function as stacks or queues depending on the insertion and removal ends. The document describes algorithms for common deque operations like insert_front, insert_back, remove_front, and remove_back. It also lists applications of deques like palindrome checking and task scheduling.
The document discusses abstract data types (ADTs). It defines an ADT as a collection of data together with a set of operations on that data. An ADT specifies what data can be stored and what operations can be performed. Simple ADTs are predefined types like integers, while complex ADTs like lists are user-defined. Lists are presented as an example complex ADT, with elements ordered in a sequence and operations to insert, find, delete and traverse elements.
This is a presentation on Arrays, one of the most important topics on Data Structures and algorithms. Anyone who is new to DSA or wants to have a theoretical understanding of the same can refer to it :D
The document defines and describes different types of arrays in C programming. It states that arrays can hold multiple values of the same data type and are used to store data in linear or tabular form. The key types discussed are one-dimensional, two-dimensional, and multi-dimensional arrays. It provides examples and explains how to declare, initialize, search and sort each array type.
This document discusses hashing and different techniques for implementing dictionaries using hashing. It begins by explaining that dictionaries store elements using keys to allow for quick lookups. It then discusses different data structures that can be used, focusing on hash tables. The document explains that hashing allows for constant-time lookups on average by using a hash function to map keys to table positions. It discusses collision resolution techniques like chaining, linear probing, and double hashing to handle collisions when the hash function maps multiple keys to the same position.
This document discusses sparse matrices. It defines a sparse matrix as a matrix with more zero values than non-zero values. Sparse matrices can save space by only storing the non-zero elements and their indices rather than allocating space for all elements. Two common representations for sparse matrices are the triplet representation, which stores the non-zero values and their row and column indices, and the linked representation, which connects the non-zero elements. Applications of sparse matrices include solving large systems of equations.
This document discusses data structures and linked lists. It provides definitions and examples of different types of linked lists, including:
- Single linked lists, which contain nodes with a data field and a link to the next node.
- Circular linked lists, where the last node links back to the first node, forming a loop.
- Doubly linked lists, where each node contains links to both the previous and next nodes.
- Operations on linked lists such as insertion, deletion, traversal, and searching are also described.
Linked lists are linear data structures where elements are linked using pointers. The three main types are singly, doubly, and circular linked lists. Linked lists allow dynamic memory allocation and fast insertion/deletion compared to arrays but slower access. A linked list contains nodes, each with a data field and pointer to the next node. Basic operations on linked lists include insertion, deletion, traversal, and search. Doubly linked lists include pointers to both the next and previous nodes.
Queue is a first-in first-out (FIFO) data structure where elements can only be added to the rear of the queue and removed from the front of the queue. It has two pointers - a front pointer pointing to the front element and a rear pointer pointing to the rear element. Queues can be implemented using arrays or linked lists. Common queue operations include initialization, checking if empty/full, enqueue to add an element, and dequeue to remove an element. The document then describes how these operations work for queues implemented using arrays, linked lists, and circular arrays. It concludes by providing exercises to implement specific queue tasks.
This document provides information about priority queues and binary heaps. It defines a binary heap as a nearly complete binary tree where the root node has the maximum/minimum value. It describes heap operations like insertion, deletion of max/min, and increasing/decreasing keys. The time complexity of these operations is O(log n). Heapsort, which uses a heap data structure, is also covered and has overall time complexity of O(n log n). Binary heaps are often used to implement priority queues and for algorithms like Dijkstra's and Prim's.
In computer science, a linked list is a linear collection of data elements, in which linear order is not given by their physical placement in memory. Instead, each element points to the next
Two dimensional arrays in C can be declared and initialized similarly to one dimensional arrays, with the first subscript specifying the row and second subscript specifying the column. Elements are stored in contiguous memory locations in row-major order. The document then presents a sample problem of reading a 2D array of integers from a file, finding the largest element, and printing it out. It also discusses using typedef to define custom data types like matrices and strings.
In computer science, a data structure is a data organization, management, and storage format that enables efficient access and modification. More precisely, a data structure is a collection of data values, the relationships among them, and the functions or operations that can be applied to the data. https://apkleet.com
<a href="https://apkleet.com" >games apk </a>
This document summarizes arrays and structures in C including:
1) Arrays are sets of index-value pairs that use consecutive memory locations. Structures group related data and can reference themselves.
2) C implements 1D arrays using consecutive memory locations accessed via indexes. Structures allow defining custom data types.
3) Operations on ordered lists include retrieving, inserting, deleting elements. Polynomials are represented as ordered pairs of exponents and coefficients. Addition involves comparing exponents and combining coefficients.
SQL language includes four primary statement types: DML, DDL, DCL, and TCL. DML statements manipulate data within tables using operations like SELECT, INSERT, UPDATE, and DELETE. DDL statements define and modify database schema using commands like CREATE, ALTER, and DROP. DCL statements control user access privileges with GRANT and REVOKE. TCL statements manage transactions with COMMIT, ROLLBACK, and SAVEPOINT to maintain data integrity.
Graph traversal techniques are used to search vertices in a graph and determine the order to visit vertices. There are two main techniques: breadth-first search (BFS) and depth-first search (DFS). BFS uses a queue and visits the nearest vertices first, producing a spanning tree. DFS uses a stack and visits vertices by going as deep as possible first, also producing a spanning tree. Both techniques involve marking visited vertices to avoid loops.
The document discusses arrays in data structures using C programming language. It defines what an array is and describes different types of arrays like one-dimensional, two-dimensional, and multi-dimensional arrays. It also explains array operations such as insertion, deletion, traversal, reversing, sorting, and searching. Additionally, it covers merging of arrays, arrays of pointers, and using arrays to represent polynomials.
The document describes the bubble sort algorithm. Bubble sort works by repeatedly swapping adjacent elements that are in the wrong order until the list is fully sorted. Each pass of bubble sort bubbles up the largest remaining element to its correct place near the end of the list. It takes multiple passes, with fewer comparisons each time, to fully sort the list from lowest to highest.
This document discusses dynamic programming and algorithms for solving all-pair shortest path problems. It begins by explaining dynamic programming as an optimization technique that works bottom-up by solving subproblems once and storing their solutions, rather than recomputing them. It then presents Floyd's algorithm for finding shortest paths between all pairs of nodes in a graph. The algorithm iterates through nodes, updating the shortest path lengths between all pairs that include that node by exploring paths through it. Finally, it discusses solving multistage graph problems using forward and backward methods that work through the graph stages in different orders.
This document describes the steps to construct a LALR parser from a context-free grammar:
1. Create an augmented grammar by adding a new start symbol and productions.
2. Generate kernel items by introducing dots in productions and adding second components. Then take closures of the items.
3. Compute the goto function to fill the parsing table.
4. Construct the CLR parsing table from the items and gotos.
5. Shrink the CLR parser by merging equivalent states to produce the more efficient LALR parsing table with fewer states.
This document discusses arrays in three sentences or less:
Arrays allow storing and accessing multiple values under a single name, with each value stored in consecutive memory locations. Arrays come in one-dimensional, two-dimensional, and multi-dimensional forms and can be accessed using indexes. Common array operations include initialization, accessing elements, searching, sorting, and performing operations on all elements using loops.
a. Concept and Definition✓
b. Inserting and Deleting nodes ✓
c. Linked implementation of a stack (PUSH/POP) ✓
d. Linked implementation of a queue (Insert/Remove) ✓
e. Circular List
• Stack as a circular list (PUSH/POP) ✓
• Queue as a circular list (Insert/Remove) ✓
f. Doubly Linked List (Insert/Remove) ✓
For more course related material:
https://github.com/ashim888/dataStructureAndAlgorithm/
Personal blog
www.ashimlamichhane.com.np
Arrays are a data structure that allow the storage of multiple elements of the same type. They can have one or more dimensions. One-dimensional arrays use a single subscript, while two-dimensional arrays use two subscripts to reference rows and columns. Arrays can be passed as arguments to functions in several ways, including as a pointer, sized array, or unsized array. Arrays are useful for storing and sorting data, performing matrix operations, and storing temporary values in recursive functions. However, arrays have limitations such as a static size, requiring elements to be of the same type, and potential memory issues if not sized correctly.
Binary search trees are binary trees where all left descendants of a node are less than the node's value and all right descendants are greater. This structure allows for efficient search, insertion, and deletion operations. The document provides definitions and examples of binary search tree properties and operations like creation, traversal, searching, insertion, deletion, and finding minimum and maximum values. Applications include dynamically maintaining a sorted dataset to enable efficient search, insertion, and deletion.
This document discusses priority queues. It defines a priority queue as a queue where insertion and deletion are based on some priority property. Items with higher priority are removed before lower priority items. There are two main types: ascending priority queues remove the smallest item, while descending priority queues remove the largest item. Priority queues are useful for scheduling jobs in operating systems, where real-time jobs have highest priority and are scheduled first. They are also used in network communication to manage limited bandwidth.
A circular queue is a fixed size data structure that follows FIFO (first in, first out) principles. Elements are added to the rear of the queue and removed from the front. When the rear reaches the end, it wraps around to the beginning so the queue space is used efficiently. Common circular queue operations include enqueue to add an element, dequeue to remove an element, and display to output all elements.
The document discusses different types of linked lists including:
- Singly linked lists that can only be traversed in one direction.
- Doubly linked lists that allow traversal in both directions using forward and backward pointers.
- Circular linked lists where the last node points back to the first node allowing continuous traversal.
- Header linked lists that include a header node at the beginning for simplified insertion and deletion. Header lists can be grounded where the last node contains a null pointer or circular where the last node points to the header.
- Two-way or doubly linked lists where each node contains a forward and backward pointer allowing bidirectional traversal through the list.
This document discusses arrays in Java programming. It covers defining and creating single and multi-dimensional arrays, accessing array elements using indexes and loops, and performing operations like sorting and finding maximum/minimum values. Examples are provided for different array types like integer, string and character arrays, and operations like input/output, break/continue statements, and star patterns. Homework involves writing a program to produce a given output pattern.
The document discusses various operations on linear arrays including memory representation, traversal, insertion, deletion, linear search, binary search, and merging. It also covers 2D arrays and their memory representation. Specifically, it provides algorithms and examples for traversing, inserting and deleting elements from linear arrays, as well as algorithms for linear and binary searching of elements. It also discusses the merging of two sorted linear arrays.
The document discusses arrays and their representation in memory. It contains 3 main points:
1) It introduces linear arrays and how they are represented in memory with sequential and contiguous locations. It also discusses multidimensional arrays.
2) It provides algorithms for common linear array operations like traversing, inserting, deleting and searching using binary search. It explains how each algorithm works through examples.
3) It discusses how 2D arrays are represented in memory and visualized, using an example of storing student exam marks in a 2D array.
Queue is a first-in first-out (FIFO) data structure where elements can only be added to the rear of the queue and removed from the front of the queue. It has two pointers - a front pointer pointing to the front element and a rear pointer pointing to the rear element. Queues can be implemented using arrays or linked lists. Common queue operations include initialization, checking if empty/full, enqueue to add an element, and dequeue to remove an element. The document then describes how these operations work for queues implemented using arrays, linked lists, and circular arrays. It concludes by providing exercises to implement specific queue tasks.
This document provides information about priority queues and binary heaps. It defines a binary heap as a nearly complete binary tree where the root node has the maximum/minimum value. It describes heap operations like insertion, deletion of max/min, and increasing/decreasing keys. The time complexity of these operations is O(log n). Heapsort, which uses a heap data structure, is also covered and has overall time complexity of O(n log n). Binary heaps are often used to implement priority queues and for algorithms like Dijkstra's and Prim's.
In computer science, a linked list is a linear collection of data elements, in which linear order is not given by their physical placement in memory. Instead, each element points to the next
Two dimensional arrays in C can be declared and initialized similarly to one dimensional arrays, with the first subscript specifying the row and second subscript specifying the column. Elements are stored in contiguous memory locations in row-major order. The document then presents a sample problem of reading a 2D array of integers from a file, finding the largest element, and printing it out. It also discusses using typedef to define custom data types like matrices and strings.
In computer science, a data structure is a data organization, management, and storage format that enables efficient access and modification. More precisely, a data structure is a collection of data values, the relationships among them, and the functions or operations that can be applied to the data. https://apkleet.com
<a href="https://apkleet.com" >games apk </a>
This document summarizes arrays and structures in C including:
1) Arrays are sets of index-value pairs that use consecutive memory locations. Structures group related data and can reference themselves.
2) C implements 1D arrays using consecutive memory locations accessed via indexes. Structures allow defining custom data types.
3) Operations on ordered lists include retrieving, inserting, deleting elements. Polynomials are represented as ordered pairs of exponents and coefficients. Addition involves comparing exponents and combining coefficients.
SQL language includes four primary statement types: DML, DDL, DCL, and TCL. DML statements manipulate data within tables using operations like SELECT, INSERT, UPDATE, and DELETE. DDL statements define and modify database schema using commands like CREATE, ALTER, and DROP. DCL statements control user access privileges with GRANT and REVOKE. TCL statements manage transactions with COMMIT, ROLLBACK, and SAVEPOINT to maintain data integrity.
Graph traversal techniques are used to search vertices in a graph and determine the order to visit vertices. There are two main techniques: breadth-first search (BFS) and depth-first search (DFS). BFS uses a queue and visits the nearest vertices first, producing a spanning tree. DFS uses a stack and visits vertices by going as deep as possible first, also producing a spanning tree. Both techniques involve marking visited vertices to avoid loops.
The document discusses arrays in data structures using C programming language. It defines what an array is and describes different types of arrays like one-dimensional, two-dimensional, and multi-dimensional arrays. It also explains array operations such as insertion, deletion, traversal, reversing, sorting, and searching. Additionally, it covers merging of arrays, arrays of pointers, and using arrays to represent polynomials.
The document describes the bubble sort algorithm. Bubble sort works by repeatedly swapping adjacent elements that are in the wrong order until the list is fully sorted. Each pass of bubble sort bubbles up the largest remaining element to its correct place near the end of the list. It takes multiple passes, with fewer comparisons each time, to fully sort the list from lowest to highest.
This document discusses dynamic programming and algorithms for solving all-pair shortest path problems. It begins by explaining dynamic programming as an optimization technique that works bottom-up by solving subproblems once and storing their solutions, rather than recomputing them. It then presents Floyd's algorithm for finding shortest paths between all pairs of nodes in a graph. The algorithm iterates through nodes, updating the shortest path lengths between all pairs that include that node by exploring paths through it. Finally, it discusses solving multistage graph problems using forward and backward methods that work through the graph stages in different orders.
This document describes the steps to construct a LALR parser from a context-free grammar:
1. Create an augmented grammar by adding a new start symbol and productions.
2. Generate kernel items by introducing dots in productions and adding second components. Then take closures of the items.
3. Compute the goto function to fill the parsing table.
4. Construct the CLR parsing table from the items and gotos.
5. Shrink the CLR parser by merging equivalent states to produce the more efficient LALR parsing table with fewer states.
This document discusses arrays in three sentences or less:
Arrays allow storing and accessing multiple values under a single name, with each value stored in consecutive memory locations. Arrays come in one-dimensional, two-dimensional, and multi-dimensional forms and can be accessed using indexes. Common array operations include initialization, accessing elements, searching, sorting, and performing operations on all elements using loops.
a. Concept and Definition✓
b. Inserting and Deleting nodes ✓
c. Linked implementation of a stack (PUSH/POP) ✓
d. Linked implementation of a queue (Insert/Remove) ✓
e. Circular List
• Stack as a circular list (PUSH/POP) ✓
• Queue as a circular list (Insert/Remove) ✓
f. Doubly Linked List (Insert/Remove) ✓
For more course related material:
https://github.com/ashim888/dataStructureAndAlgorithm/
Personal blog
www.ashimlamichhane.com.np
Arrays are a data structure that allow the storage of multiple elements of the same type. They can have one or more dimensions. One-dimensional arrays use a single subscript, while two-dimensional arrays use two subscripts to reference rows and columns. Arrays can be passed as arguments to functions in several ways, including as a pointer, sized array, or unsized array. Arrays are useful for storing and sorting data, performing matrix operations, and storing temporary values in recursive functions. However, arrays have limitations such as a static size, requiring elements to be of the same type, and potential memory issues if not sized correctly.
Binary search trees are binary trees where all left descendants of a node are less than the node's value and all right descendants are greater. This structure allows for efficient search, insertion, and deletion operations. The document provides definitions and examples of binary search tree properties and operations like creation, traversal, searching, insertion, deletion, and finding minimum and maximum values. Applications include dynamically maintaining a sorted dataset to enable efficient search, insertion, and deletion.
This document discusses priority queues. It defines a priority queue as a queue where insertion and deletion are based on some priority property. Items with higher priority are removed before lower priority items. There are two main types: ascending priority queues remove the smallest item, while descending priority queues remove the largest item. Priority queues are useful for scheduling jobs in operating systems, where real-time jobs have highest priority and are scheduled first. They are also used in network communication to manage limited bandwidth.
A circular queue is a fixed size data structure that follows FIFO (first in, first out) principles. Elements are added to the rear of the queue and removed from the front. When the rear reaches the end, it wraps around to the beginning so the queue space is used efficiently. Common circular queue operations include enqueue to add an element, dequeue to remove an element, and display to output all elements.
The document discusses different types of linked lists including:
- Singly linked lists that can only be traversed in one direction.
- Doubly linked lists that allow traversal in both directions using forward and backward pointers.
- Circular linked lists where the last node points back to the first node allowing continuous traversal.
- Header linked lists that include a header node at the beginning for simplified insertion and deletion. Header lists can be grounded where the last node contains a null pointer or circular where the last node points to the header.
- Two-way or doubly linked lists where each node contains a forward and backward pointer allowing bidirectional traversal through the list.
This document discusses arrays in Java programming. It covers defining and creating single and multi-dimensional arrays, accessing array elements using indexes and loops, and performing operations like sorting and finding maximum/minimum values. Examples are provided for different array types like integer, string and character arrays, and operations like input/output, break/continue statements, and star patterns. Homework involves writing a program to produce a given output pattern.
The document discusses various operations on linear arrays including memory representation, traversal, insertion, deletion, linear search, binary search, and merging. It also covers 2D arrays and their memory representation. Specifically, it provides algorithms and examples for traversing, inserting and deleting elements from linear arrays, as well as algorithms for linear and binary searching of elements. It also discusses the merging of two sorted linear arrays.
The document discusses arrays and their representation in memory. It contains 3 main points:
1) It introduces linear arrays and how they are represented in memory with sequential and contiguous locations. It also discusses multidimensional arrays.
2) It provides algorithms for common linear array operations like traversing, inserting, deleting and searching using binary search. It explains how each algorithm works through examples.
3) It discusses how 2D arrays are represented in memory and visualized, using an example of storing student exam marks in a 2D array.
The document discusses various searching and sorting algorithms. It begins by defining searching as finding an item in a list. It describes sequential and binary search techniques. For sorting, it covers bubble, selection, insertion, merge, quick and heap sorts. It provides pseudocode examples and analyzes the time complexity of algorithms like selection sort and quicksort. Key aspects covered include the divide and conquer approach of quicksort and the efficiency of various sorting methods.
The document discusses various searching and sorting algorithms. It begins by defining searching as finding an item in a list. It describes sequential and binary search techniques. For sorting, it covers bubble, selection, insertion, merge, quick and heap sorts. It provides pseudocode examples and analyzes the time complexity of algorithms like selection sort and quicksort. Key aspects covered include the divide and conquer approach of quicksort and the efficiency of various sorting methods.
The document discusses various searching and sorting algorithms that use the divide and conquer approach. It describes linear search, binary search, and merge sort algorithms. Linear search has a time complexity of O(n) as it must examine each element to find the target. Binary search has a time complexity of O(log n) as it divides the search space in half each iteration. Merge sort also has a time complexity of O(n log n) as it divides the list into single elements and then merges them back together in sorted order.
This document discusses various searching and sorting algorithms. It begins by defining searching as finding an element in a given list. Linear search and binary search are described as two common searching algorithms. Linear search has O(n) time complexity while binary search has O(log n) time complexity but requires a sorted list. The document also discusses different sorting algorithms like bubble sort, insertion sort, and merge sort, and defines key concepts related to sorting like stability, efficiency, and passes.
This document provides information on various searching and sorting algorithms, including linear search, binary search, bubble sort, selection sort, and insertion sort. It begins with an overview of searching and describes linear and binary search algorithms. For linear search, it provides pseudocode and an example. For binary search, it also provides pseudocode and an example. The document then discusses sorting algorithms like bubble sort, selection sort, and insertion sort, providing descriptions, pseudocode, examples, and analyses of each.
Students will be able to learn the various kinds of searching, sorting and hashing techniques to handle the data structures efficiently. This PPT contains the following topics: linear search, binary search, insertion sort, selection sort, bubble sort, shell sort, quick sort merge sort, bucket sort, m-way merge sort, polyphase merge sort, hashing techniques like separate chaining, closed chaining or open addressing, linear probing, quadratic probing, double hashing, rehashing and extendible hashing.
The document summarizes different searching and sorting algorithms. It discusses linear search and binary search for searching algorithms. It explains that linear search has O(n) time complexity while binary search has O(log n) time complexity. For sorting algorithms, it describes bubble sort, selection sort, and insertion sort. It provides pseudocode to illustrate how each algorithm works to sort a list or array.
The document discusses two search algorithms: linear search and binary search. Linear search sequentially scans an array to find a value, while binary search divides the array in half at each step to quickly locate a value in a sorted array. It provides pseudocode for both algorithms and compares their benefits, with linear search being simpler but less efficient than binary search for large data sets.
BASIC ALGORITHMS
SEARCHING (LINEAR SEARCH, BINARY SEARCH ETC.), BASIC SORTING ALGORITHMS (BUBBLE, INSERTION AND SELECTION), FINDING ROOTS OF EQUATIONS, NOTION OF ORDER OF COMPLEXITY THROUGH EXAMPLE PROGRAMS (NO FORMAL DEFINITION REQUIRED)
The document discusses various searching algorithms. It introduces linear search and binary search. Linear search sequentially checks each element until the target is found or the entire array is searched. Binary search works on a sorted array by repeatedly dividing the search space in half and focusing on only one half. The best case for both is O(1) while the worst case for linear search is O(N) and for binary search is O(LogN).
Searching algorithms are used to find elements within datasets. Sequential search linearly checks each element until a match is found, taking O(n) time on average. Interval search algorithms like binary search target the center of a sorted structure and divide the search space in half at each step, taking O(log n) time on average. Jump search checks fewer elements than linear search by jumping ahead by a fixed number of steps or block size, typically the square root of the list length. Interpolation search may check non-middle indexes based on the searched value, working best for uniformly distributed sorted data.
Binary search trees (BSTs) are data structures that allow for efficient searching, insertion, and deletion. Nodes in a BST are organized so that all left descendants of a node are less than the node's value and all right descendants are greater. This property allows values to be found, inserted, or deleted in O(log n) time on average. Searching involves recursively checking if the target value is less than or greater than the current node's value. Insertion follows the search process and adds the new node in the appropriate place. Deletion handles three cases: removing a leaf, node with one child, or node with two children.
This document discusses binary trees and their traversal. It defines binary trees, their properties such as levels and degrees of nodes. It describes different types of binary trees like complete, skewed, etc. It also explains different traversal techniques like preorder, inorder and postorder traversals and provides algorithms to implement these traversals recursively as well as using stacks. Memory representations of binary trees like sequential and linked are also summarized.
This document discusses queues and related data structures. It defines a queue as a first-in, first-out collection where items can be inserted at the rear and deleted from the front. Algorithms for array and linked list implementations of queues are presented for insertion and deletion operations. Priority queues are described as ordered queues where the highest or lowest priority item is always at the front. Deques allow insertion and deletion from both ends and are more versatile than regular queues or stacks.
Merge sort is a divide and conquer algorithm that works as follows:
1) Divide the array to be sorted into two halves recursively until single element subarrays are reached.
2) Merge the subarrays in a way that combines them in a sorted order.
3) The merging process involves taking the first element of each subarray and comparing them to place the smaller element in the final array until all elements are merged.
Merge sort runs in O(n log n) time in all cases making it one of the most efficient sorting algorithms.
The document describes the Tower of Hanoi puzzle, which involves moving disks of different sizes between three pegs according to rules of only moving one disk at a time and never placing a larger disk on top of a smaller one. It provides an algorithm and recursive solution for solving the puzzle by moving disks from the source peg to the auxiliary peg and then to the destination peg. The number of minimum moves needed to solve the puzzle for n disks is 2^n - 1. For example, 4 disks requires 15 moves.
The document introduces stacks and their operations. It defines a stack as a last-in, first-out data structure that can only be accessed at one end. The key stack operations are push, which adds an item to the top, and pop, which removes an item from the top. It provides examples of stack representations using arrays and linked lists, and algorithms for implementing push and pop. The document also discusses postfix notation for arithmetic expressions and algorithms for evaluating expressions in postfix notation using a stack.
The document describes three sorting algorithms: bubble sort, insertion sort, and selection sort. Bubble sort works by traversing a list from the beginning to end and swapping adjacent elements to bubble the largest values to the end over multiple passes until the list is fully sorted. Insertion sort iterates through a list and inserts each element into its sorted position by shifting other elements over. Selection sort finds the minimum element on each pass and swaps it into the front of the partially sorted list. All three algorithms have a worst-case quadratic runtime of O(n^2).
The document discusses hashing techniques for storing and retrieving data from memory. It covers hash functions, hash tables, open addressing techniques like linear probing and quadratic probing, and closed hashing using separate chaining. Hashing maps keys to memory addresses using a hash function to store and find data independently of the number of items. Collisions may occur and different collision resolution methods are used like open addressing that resolves collisions by probing in the table or closed hashing that uses separate chaining with linked lists. The efficiency of hashing depends on factors like load factor and average number of probes.
The document describes depth-first search (DFS) and breadth-first search (BFS) graph traversal algorithms. DFS uses a stack and processes each node by first exploring all of its neighbor nodes before backtracking, while BFS uses a queue and processes nodes level-by-level from the starting node outwards. Both algorithms initialize all nodes as ready, process nodes by changing their status, and add neighboring ready nodes to the stack/queue to change their status to waiting.
Data Structure and Algorithms Huffman Coding AlgorithmManishPrajapati78
Huffman coding is a statistical compression technique that assigns variable-length codes to characters based on their frequency of occurrence. It builds a Huffman tree by prioritizing characters from most to least frequent, then assigns codes by traversing the tree left for 0 and right for 1. This results in shorter codes for more common characters, compressing text files into fewer bits than standard ASCII encoding. The receiver reconstructs the same Huffman tree to decode the bitstream back into the original text.
The document discusses heaps and heapsort. It defines max heaps and min heaps as complete binary trees where each node's key is greater than or less than its children's keys. It describes operations on heaps like insertion, deletion of the max/min element, and creation of an empty heap. Algorithms for insertion and deletion into max heaps are provided. Heapsort is described as building a max heap of the input array and then repeatedly extracting the max element to sort the array.
The document discusses balanced binary search trees, specifically AVL trees. It explains that AVL trees ensure the height of the tree remains O(log N) during insertions and deletions by enforcing that the heights of all nodes' left and right subtrees differ by at most 1. The document outlines the process for inserting and deleting nodes from an AVL tree, which may require rotations to restore balance. Rotations are classified based on the position of inserted/deleted nodes and include left-left, left-right, right-right, and right-left varieties.
A brief introduction to OpenTelemetry, with a practical example of auto-instrumenting a Java web application with the Grafana stack (Loki, Grafana, Tempo, and Mimir).
Artificial Intelligence Applications Across IndustriesSandeepKS52
Artificial Intelligence is a rapidly growing field that influences many aspects of modern life, including transportation, healthcare, and finance. Understanding the basics of AI provides insight into how machines can learn and make decisions, which is essential for grasping its applications in various industries. In the automotive sector, AI enhances vehicle safety and efficiency through advanced technologies like self-driving systems and predictive maintenance. Similarly, in healthcare, AI plays a crucial role in diagnosing diseases and personalizing treatment plans, while in financial services, it helps in fraud detection and risk management. By exploring these themes, a clearer picture of AI's transformative impact on society emerges, highlighting both its potential benefits and challenges.
Revolutionize Your Insurance Workflow with Claims Management SoftwareInsurance Tech Services
Claims management software enhances efficiency, accuracy, and satisfaction by automating processes, reducing errors, and speeding up transparent claims handling—building trust and cutting costs. Explore More - https://www.damcogroup.com/insurance/claims-management-software
Providing Better Biodiversity Through Better DataSafe Software
This session explores how FME is transforming data workflows at Ireland’s National Biodiversity Data Centre (NBDC) by eliminating manual data manipulation, incorporating machine learning, and enhancing overall efficiency. Attendees will gain insight into how NBDC is using FME to document and understand internal processes, make decision-making fully transparent, and shine a light on underlying code to improve clarity and reduce silent failures.
The presentation will also outline NBDC’s future plans for FME, including empowering staff to access and query data independently, without relying on external consultants. It will also showcase ambitions to connect to new data sources, unlock the full potential of its valuable datasets, create living atlases, and place its valuable data directly into the hands of decision-makers across Ireland—ensuring that biodiversity is not only protected but actively enhanced.
In a tight labor market and tighter economy, PMOs and resource managers must ensure that every team member is focused on the highest-value work. This session explores how AI reshapes resource planning and empowers organizations to forecast capacity, prevent burnout, and balance workloads more effectively, even with shrinking teams.
Marketo & Dynamics can be Most Excellent to Each Other – The SequelBradBedford3
So you’ve built trust in your Marketo Engage-Dynamics integration—excellent. But now what?
This sequel picks up where our last adventure left off, offering a step-by-step guide to move from stable sync to strategic power moves. We’ll share real-world project examples that empower sales and marketing to work smarter and stay aligned.
If you’re ready to go beyond the basics and do truly most excellent stuff, this session is your guide.
From Chaos to Clarity - Designing (AI-Ready) APIs with APIOps CyclesMarjukka Niinioja
Teams delivering API are challenges with:
- Connecting APIs to business strategy
- Measuring API success (audit & lifecycle metrics)
- Partner/Ecosystem onboarding
- Consistent documentation, security, and publishing
🧠 The big takeaway?
Many teams can build APIs. But few connect them to value, visibility, and long-term improvement.
That’s why the APIOps Cycles method helps teams:
📍 Start where the pain is (one “metro station” at a time)
📈 Scale success across strategy, platform, and operations
🛠 Use collaborative canvases to get buy-in and visibility
Want to try it and learn more?
- Follow APIOps Cycles in LinkedIn
- Visit the www.apiopscycles.com site
- Subscribe to email list
-
How Insurance Policy Administration Streamlines Policy Lifecycle for Agile Op...Insurance Tech Services
A modern Policy Administration System streamlines workflows and integrates with core systems to boost speed, accuracy, and customer satisfaction across the policy lifecycle. Visit https://www.damcogroup.com/insurance/policy-administration-systems for more details!
GDG Douglas - Google AI Agents: Your Next Intern?felipeceotto
Presentation done at the GDG Douglas event for June 2025.
A first look at Google's new Agent Development Kit.
Agent Development Kit is a new open-source framework from Google designed to simplify the full stack end-to-end development of agents and multi-agent systems.
Who will create the languages of the future?Jordi Cabot
Will future languages be created by language engineers?
Can you "vibe" a DSL?
In this talk, we will explore the changing landscape of language engineering and discuss how Artificial Intelligence and low-code/no-code techniques can play a role in this future by helping in the definition, use, execution, and testing of new languages. Even empowering non-tech users to create their own language infrastructure. Maybe without them even realizing.
Best Inbound Call Tracking Software for Small BusinessesTheTelephony
The best inbound call tracking software for small businesses offers features like call recording, real-time analytics, lead attribution, and CRM integration. It helps track marketing campaign performance, improve customer service, and manage leads efficiently. Look for solutions with user-friendly dashboards, customizable reporting, and scalable pricing plans tailored for small teams. Choosing the right tool can significantly enhance communication and boost overall business growth.
Invited Talk at RAISE 2025: Requirements engineering for AI-powered SoftwarE Workshop co-located with ICSE, the IEEE/ACM International Conference on Software Engineering.
Abstract: Foundation Models (FMs) have shown remarkable capabilities in various natural language tasks. However, their ability to accurately capture stakeholder requirements remains a significant challenge for using FMs for software development. This paper introduces a novel approach that leverages an FM-powered multi-agent system called AlignMind to address this issue. By having a cognitive architecture that enhances FMs with Theory-of-Mind capabilities, our approach considers the mental states and perspectives of software makers. This allows our solution to iteratively clarify the beliefs, desires, and intentions of stakeholders, translating these into a set of refined requirements and a corresponding actionable natural language workflow in the often-overlooked requirements refinement phase of software engineering, which is crucial after initial elicitation. Through a multifaceted evaluation covering 150 diverse use cases, we demonstrate that our approach can accurately capture the intents and requirements of stakeholders, articulating them as both specifications and a step-by-step plan of action. Our findings suggest that the potential for significant improvements in the software development process justifies these investments. Our work lays the groundwork for future innovation in building intent-first development environments, where software makers can seamlessly collaborate with AIs to create software that truly meets their needs.
FME as an Orchestration Tool - Peak of Data & AI 2025Safe Software
Processing huge amounts of data through FME can have performance consequences, but as an orchestration tool, FME is brilliant! We'll take a look at the principles of data gravity, best practices, pros, cons, tips and tricks. And of course all spiced up with relevant examples!
Have you upgraded your application from Qt 5 to Qt 6? If so, your QML modules might still be stuck in the old Qt 5 style—technically compatible, but far from optimal. Qt 6 introduces a modernized approach to QML modules that offers better integration with CMake, enhanced maintainability, and significant productivity gains.
In this webinar, we’ll walk you through the benefits of adopting Qt 6 style QML modules and show you how to make the transition. You'll learn how to leverage the new module system to reduce boilerplate, simplify builds, and modernize your application architecture. Whether you're planning a full migration or just exploring what's new, this session will help you get the most out of your move to Qt 6.
NTRODUCTION TO SOFTWARE TESTING
• Definition:
• Software testing is the process of evaluating and
verifying that a software application or system meets
specified requirements and functions correctly.
• Purpose:
• Identify defects and bugs in the software.
• Ensure the software meets quality standards.
• Validate that the software performs as intended in
various scenarios.
• Importance:
• Reduces risks associated with software failures.
• Improves user satisfaction and trust in the product.
• Enhances the overall reliability and performance of
the software
2. CONTENTS
2.1 Introductions
2.2 Linear Array
2.2.1 Linear Array Representations in Memory
2.2.2 Traversing Algorithm
2.2.3 Insert Algorithms
2.2.4 Delete Algorithms
2.2.5 Sequential and Binary Search Algorithm
2.2.6 Merging Algorithm
2.3 Multidimensional Array
2.3.1 2-D Array
2.3.2 Representations in Memory
2
3. 2.1 Introduction
Data Structure can be classified as:
linear
non-linear
Linear (elements arranged in sequential in memory
location) i.e. array & linear link-list
Non-linear such as a tree and graph.
Operations:
Traversing, Searching, Inserting, Deleting, Sorting, Merging
Array is used to store a fix size for data and a link-list
the data can be varies in size.
3
4. 2.1 Introduction
Advantages of an Array:
Very simple
Economy – if full use of memory
Random accessed at the same time
Disadvantage of an Array:
wasting memory if not fully used
4
5. 2.2 Linear Array
Homogeneous data:
a) Elements are represented through indexes.
b) Elements are saved in sequential in memory locations.
Number of elements, N –> length or size of an array.
If:
UB : upper bound ( the largest index)
LB : lower bound (the smallest index)
Then: N = UB – LB + 1
Length = N = UB when LB = 1
5
6. 2.2 Linear Array
All elements in A are written symbolically as, 1 .. n is the
subscript.
A1, A2, A3, .... , An
In FORTRAN and BASIC A(1), A(2), ..., A(N)
In Pascal, C/C++ and Java A[0], A[1], ..., A[N-1]
subscript starts from 0
LB = 0, UB = N–1
6
7. 2.2.1 Representation of Array in a Memory
The process to determine the address in a memory:
a) First address – base address.
b) Relative address to base address through index function.
Example: char X[100];
Let char uses 1 location storage.
If the base address is 1200 then the next element is in 1201.
Index Function is written as:
Loc (X[i]) = Loc(X[0]) + i , i is subscript and LB = 0
1200 1201 1202 1203
X[0] X[1] X[2]
7
8. 2.2.1 Representation of Array in a Memory
In general, index function:
Loc (X[i]) = Loc(X[LB]) + w*(i-LB);
where w is length of memory location required.
For real number: 4 byte, integer: 2 byte and character: 1 byte.
Example:
If LB = 5, Loc(X[LB]) = 1200, and w = 4, find Loc(X[8]) ?
Loc(X[8])= Loc(X[5]) + 4*(8 – 5)
= 1212
8
9. 2.2.2 Traversing Algorithm
Traversing operation means visit every element once.
e.g. to print, etc.
Example algorithm:
9
1. [Assign counter]
K=LB // LB = 0
2. Repeat step 2.1 and 2.2 while K <= UB // If LB = 0
2.1 [visit element]
do PROCESS on LA[K]
2.2 [add counter]
K=K+1
3. end repeat step 2
4. exit
10. 2.2.3 Insertion Algorithm
Insert item at the back is easy if there is a space. Insert
item in the middle requires the movement of all elements
to the right as in Figure 1.
0 1 2 3 4 k MAX_LIST-1
1 2 3 4 5 k+1 MAX_LIST
10
12 3 44 19 100 … 5 10 18 ? … ?
k+1
size
Array indexes New item
ADT list positions
items
Figure 1: Shifting items for insertion at position 3
11. 2.2.3 Insertion Algorithm
Example algorithm:
11
INSERT(LA, N, K, ITEM)
//LA is a linear array with N element
//K is integer positive where K < N and LB = 0
//Insert an element, ITEM in index K
1. [Assign counter]
J = N – 1; // LB = 0
2. Repeat step 2.1 and 2.2 while J >= K
2.1 [shift to the right all elements from J]
LA[J+1] = LA[J]
2.2 [decrement counter] J = J – 1
3. [Stop repeat step 2]
4. [Insert element] LA[K] = ITEM
5. [Reset N] N = N + 1
6. Exit
12. 2.2.4 Deletion Algorithm
Delete item.
(a)
0 1 2 3 4 k-1 k MAX_LIST-1
1 2 3 4 5 k k+1 MAX_LIST
12
12 3 44 100 … 5 10 18 ? … ?
k
size
Array indexes
Delete 19
ADT list positions
items
Figure 2: Deletion causes a gap
13. 2.2.4 Deletion Algorithm
(b)
0 1 2 3 k-1 MAX_LIST-1
1 2 3 4 k MAX_LIST
13
12 3 44 100 … 5 10 18 ? … ?
k
size
Array indexes
ADT list positions
items
Figure 3: Fill gap by shifting
14. 2.2.4 Deletion Algorithm
Example algorithm:
14
DELETE(LA, N, K, ITEM)
1. ITEM = LA[K]
2. Repeat for I = K to N–2 // If LB = 0
2.1 [Shift element, forward]
LA[I] = LA[I+1]
3. [end of loop]
4. [Reset N in LA]
N = N – 1
5. Exit
15. 2.2.5 Sequential Search
Compare successive elements of a given list with a search ITEM
until
1. either a match is encountered
2. or the list is exhausted without a match.
0 1 N-1
Algorithm:
SequentialSearch(LA, N, ITEM, LOC)
1. I = 0 // If LB = 0
2. Repeat step 2.1 while (i<N and LA[I] != ITEM )
2.1 I=I+1
3. If LA[I]==ITEM then
Return found at LOC=I
If not
Return not found 15
16. 2.2.5 Binary Search Algorithm
Binary search algorithm is efficient if the array is sorted.
A binary search is used whenever the list starts to become large.
Consider to use binary searches whenever the list contains more
than 16 elements.
The binary search starts by testing the data in the element at the
middle of the array to determine if the target is in the first or
second half of the list.
If it is in the first half, we do not need to check the second half. If
it is in the second half, we do not need to test the first half. In other
words we eliminate half the list from further consideration. We
repeat this process until we find the target or determine that it is
not in the list.
16
17. 2.2.5 Binary Search Algorithm
To find the middle of the list, we need three variables, one to
identify the beginning of the list, one to identify the middle
of the list, and one to identify the end of the list.
We analyze two cases here: the target is in the list (target
found) and the target is not in the list (target not found).
17
18. 2.2.5 Binary Search Algorithm
Target found case: Assume we want to find 22 in a sorted
list as follows:
The three indexes are first, mid and last. Given first as 0 and
last as 11, mid is calculated as follows:
mid = (first + last) / 2
mid = (0 + 11) / 2 = 11 / 2 = 5
18
4 7 8 10 14 21 22 36 62 77 81 91
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11]
19. 2.2.5 Binary Search Algorithm
At index location 5, the target is greater than the list value (22 > 21).
Therefore, eliminate the array locations 0 through 5 (mid is automatically
eliminated). To narrow our search, we assign mid + 1 to first and repeat
the search.
19
4 7 8 10 14 21 22 36 62 77 81 91
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11]
0 5 11
first mid last
Target: 22Target: 22
22 > 21
20. 2.2.5 Binary Search Algorithm
The next loop calculates mid with the new value for first and
determines that the midpoint is now 8 as follows:
mid = (6 + 11) / 2 = 17 / 2 = 8
20
4 7 8 10 14 21 22 36 62 77 81 91
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11]
6 8 11
first mid last
Target: 22Target: 22
22 < 62
21. 2.2.5 Binary Search Algorithm
When we test the target to the value at mid a second time, we discover that the
target is less than the list value (22 < 62). This time we adjust the end of the list
by setting last to mid – 1 and recalculate mid. This step effectively eliminates
elements 8 through 11 from consideration. We have now arrived at index location
6, whose value matches our target. This stops the search.
21
4 7 8 10 14 21 22 36 62 77 81 91
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11]
6 6 7
first mid last
Target: 22Target: 22
22 equals 228 6 7
function terminates
first mid last
22. 2.2.5 Binary Search Algorithm
Target not found case: This is done by testing for first and last crossing:
that is, we are done when first becomes greater than last. Two conditions
terminate the binary search algorithm when (a) the target is found or (b)
first becomes larger than last. Assume we want to find 11 in our binary
search array.
22
4 7 8 10 14 21 22 36 62 77 81 91
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11]
0 5 11
first mid last Target: 11Target: 11
11 < 21
23. 2.2.5 Binary Search Algorithm
The loop continues to narrow the range as we saw in the
successful search until we are examining the data at index
locations 3 and 4.
23
4 7 8 10 14 21 22 36 62 77 81 91
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11]
0 2 4
first mid last
Target: 11Target: 11
11 > 8
24. 2.2.5 Binary Search Algorithm
These settings of first and last set the mid index to 3 as follows:
mid = (3 + 4) / 2 = 7 / 2 = 3
24
4 7 8 10 14 21 22 36 62 77 81 91
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11]
3 3 4
first mid last Target: 11Target: 11
11 > 10
25. 2.2.5 Binary Search Algorithm
The test at index 3indicates that the target is greater than the list value, so we set first to mid
+ 1, or 4. We now test the data at location 4 and discover that 11 < 14. The mid is as
calculated as follows:
At this point, we have discovered that the target should be between two adjacent values; in
other words, it is not in the list. We see this algorithmically because last is set to mid – 1,
which makes first greater than last, the signal that the value we are looking for is not in the
list.
25
4 7 8 10 14 21 22 36 62 77 81 91
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11]
4 4 4
first mid last
Target: 11Target: 11
11 < 14 4 4 3
first mid last
Function terminates
26. 2.2.5 Binary Search Algorithm
Example algorithm:
DATA – sorted array
ITEM – Info
LB – lower bound
UB – upper bound
ST – start Location
MID – middle Location
LAST – last Location
26
27. 2.2.5 Binary Search Algorithm
27
1. [Define variables]
ST = LB, LAST= UB;
MID = (ST+LAST)/2;
2. Repeat 3 and 4 WHILE (ST <= LAST & DATA[MID] !=
ITEM)
3. If ITEM < DATA[MID] then
LAST = MID-1
If not
ST = MID+1
4. Set MID = INT((ST + LAST)/2)
[LAST repeat to 2]
5. If DATA[MID] == ITEM then
LOK = MID
If not
LOK = NULL
6. Stop
28. 2.2.6 Merging Algorithm
Suppose A is a sorted list with r elements and B is a
sorted list with s elements. The operation that
combines the element of A and B into a single sorted
list C with n=r + s elements is called merging.
28
29. 2.2.6 Merging Algorithm
Algorithm: Merging (A, R,B,S,C)
Here A and B be sorted arrays with R and S elements
respectively. This algorithm merges A and B into an array
C with N=R+ S elements
Step 1: Set NA=1, NB=1 and NC=1
Step 2: Repeat while NA ≤ R and NB ≤ S:
if A[NA] ≤ B[NB], then:
Set C[NC] = A[NA]
Set NA = NA +1
else
Set C[NC] = B[NB]
Set NB = NB +1
[End of if structure]
Set NC= NC +1
[End of Loop]
29
30. 2.2.6 Merging Algorithm
Step 3: If NA >R, then:
Repeat while NB ≤ S:
Set C[NC] = B[NB]
Set NB = NB+1
Set NC = NC +1
[End of Loop]
else
Repeat while NA ≤ R:
Set C[NC] = A[NA]
Set NC = NC + 1
Set NA = NA +1
[End of loop]
[End of if structure]
Step 4: Return C[NC]
30
31. 2.2.6 Merging Algorithm
Complexity of merging: The input consists of the
total number n=r+s elements in A and B. Each
comparison assigns an element to the array C, which
eventually has n elements. Accordingly, the number
f(n) of comparisons cannot exceed n:
f(n) ≤ n = O(n)
31
32. Exercises
Find where the indicated elements of an array a
are stored, if the base address of a is 200* and
LB = 0
a) double a[10]; a[3]?
b) int a[26]; a[2]?
*(assume that int(s) are stored in 4 bytes and
double(s) in 8 bytes).
32
34. 2-D ARRAY
A 2-D array, A with m X n elements.
In math application it is called matrix.
In business application – table.
Example:
Assume 25 students had taken 4 tests.
The marks are stored in 25 X 4 array locations:
34
U0 U1 U2 U3
Stud 0 88 78 66 89
Stud 1 60 70 88 90
Stud 2 62 45 78 88
.. .. .. .. ..
.. .. .. .. ..
Stud 24 78 88 98 67
n
m
35. 2-D ARRAY
Multidimensional array declaration in C++:-
int StudentMarks [25][4];
StudentMarks[0][0] = 88;
StudentMarks[0][1] = 78;…..
OR
int StudentMarks [25][4] = {{88, 78, 66, 89},
{60, 70, 88, 90},…}
35
36. 2.3.1 2-D ARRAY
In C++ the 2-D array is visualized as follows:
36
…
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[24]
StudentMarks
88 78 66 89
60 70 88 90
62 45 78 88
[0] [1] [2] [3]
37. 2.3.2 Representation of
2D arrays in Memory
Column Major Order:
LOC(A[j, k])=Base(A)+w[m*k + j]
Row Major order:
LOC(A[j, k])=Base(A)+w[n*j + k]
Given: A 2-D array, A with m X n elements.