Chapter 2 8 Search Algorithms Search Algorithms Array
- Slides: 58
Chapter 2. 8 Search Algorithms
Search Algorithms • Array Search – An array contains a certain number of records – Each record is identified by a certain key – One searches the record with a given key • String Search – A text is represented by an array of characters – One searches one or all occurrences of a certain string
Search Algorithms • Array Search – An array contains a certain number of records – Each record is identified by a certain key – One searches the record with a given key • String Search – A text is represented by an array of characters – One searches one or all occurrences of a certain string
Array Search PROCEDURE Search – Two parameters: • The Array to be searched – Contains n Items – Index in the range 0. . n – Item with index 0 is not used • The Key of the Item to be found – Search returns a Cardinal value • the index of the Item where the key has been found • if the key has not been found , 0.
Array Search TYPE Array. Of. Items = ARRAY[0. . n] OF Item; (* By convention, the element with index 0 is not used *) Item = RECORD Key : Key. Type (* any ordinal type *); Other record fields ; END;
Straight Search PROCEDURE Search ( VAR A: ARRAY OF Item, Key: Key. Type) : CARDINAL; VAR i : CARDINAL; BEGIN i : = HIGH(A); WHILE A[i]. Key # Key AND i # 0 DO DEC(i) END; RETURN i END Search;
Straight Search PROCEDURE Search ( VAR A: ARRAY OF Item, Key: Key. Type) : CARDINAL; VAR i : CARDINAL; BEGIN i : = HIGH(A); WHILE A[i]. Key # Key AND i # 0 DO DEC(i) END; RETURN i END Search;
Sentinel Search PROCEDURE Search ( VAR A: ARRAY OF Item, Key: Key. Type) : CARDINAL; VAR i : CARDINAL; BEGIN i : = HIGH(A); A[0]. Key : = Key; WHILE A[i]. Key # Key DO DEC(i) END; RETURN i END Search;
Binary Search # elements > 1 Yes No Key = Keyelement No Not Found Yes No Found Key < Keymiddle Binary Search right half Yes Binary Search left half # elements > 1
Binary Search (1) PROCEDURE Search(VAR a: ARRAY OF Item, Key: Key. Type): CARDINAL; VAR Min, Max, m: CARDINAL; PROCEDURE src(Min, Max: CARDINAL); … END src; BEGIN Min : = 1; Max : = HIGH(a); src(Min, Max); IF a[m]. Key = Key THEN RETURN m ELSE RETURN 0 END Search;
Binary Search (2) PROCEDURE Src(Min, Max : CARDINAL); BEGIN m : = (Min+Max) DIV 2; IF Min # Max THEN IF a[m]. Key >= Key THEN src(Min, m) ELSE src(m+1, Max) END; END Src;
Iterative Binary Search PROCEDURE Search(VAR a: ARRAY OF Item, Key: Key. Type): CARDINAL; VAR Min, Max, m: CARDINAL; BEGIN Min : = 1; Max : = HIGH(a); WHILE Min < Max DO m : = (Min+Max) DIV 2; IF a[m]. Key >= Key THEN Max : = m ELSE Min : = m+1 END; (* IF *) END; (* WHILE *) IF a[m]. Key = Key THEN RETURN m ELSE RETURN 0 END Search;
Array Search Performance (Number of comparisons) • Unordered Array – Straight search : 2 n – Sentinel search : n • Ordered Array – Binary search : log 2 n
Search Algorithms • Array Search – An array contains a certain number of records – Each record is identified by a certain key – One searches the record with a given key • String Search – A text is represented by an array of characters – One searches one or all occurrences of a certain string
String Search • The problem: Find a given string in a text. • Data structures: Text : ARRAY[1. . Text. Size] OF CHAR; String : ARRAY[1. . String. Size] OF CHAR; • The Algorithms: – Brute Force – Knuth, Morris & Pratt (KPM - 1974) – Boyer & Moore (BM - 1977)
String Search by Brute Force this algorithm tries to find a string WHILE current char. in Text # String[1] Move to next character in Text End of Text reached ? No WHILE char. in Text = char. in String Move to next character pair String matched OR Text exhausted
Brute Force String Search (Straightforward coding) PROCEDURE Search (VAR Text: Text. Type; TLength: CARDINAL; VAR String: String. Type; SLength: CARDINAL): CARDINAL; VAR j, jmax : CARDINAL; BEGIN j : = 0; jmax : = TLength - SLength; REPEAT WHILE (Text[j] # String[1]) AND (j <= jmax) DO j : = j+1 END; IF j <= jmax THEN i : = 2; WHILE (Text[j+i] = String[i]) AND (i < SLength) DO i : = i+1 END; (* IF *) j : = j + 1; UNTIL (i = SLength) OR (j > jmax); RETURN j - 1 END Search;
String Search (1) by the KMP algorithm GATCAGCAATCATCATCACATC ATCATCACAT Mismatch in first position of string, Move string 1 position in text
String Search(2) by the KMP algorithm GATCAGCAATCATCATCACATC ATCATCACAT Mismatch in fourth position of string, Move string 4 positions in text
String Search(3) by the KMP algorithm GATCAGCAATCATCATCACATC ATCATCACAT Mismatch in fifth position of string, Move string 4 positions in text
String Search(4) by the KMP algorithm GATCAGCAATCATCATCACATC ATCATCACAT Mismatch in first position of string, Move string 1 position in text
String Search(5) by the KMP algorithm GATCAGCAATCATCATCACATC ATCATCACAT Mismatch in first position of string, Move string 1 position in text
String Search(6) by the KMP algorithm GATCAGCAATCATCATCACATC ATCATCACAT Mismatch in second position of string, Move string 1 position in text
String Search(7) by the KMP algorithm GATCAGCAATCATCATCACATC ATCATCACAT Mismatch in eight position of string, Move string 3 positions in text
String Search(8) by the KMP algorithm GATCAGCAATCATCATCACATC ATCATCACAT String found !
The KMP algorithm The Next function x x x / A x x x x A T C A C A T Step: 1 ? ? ? ? ? A T C A C A T
The KMP algorithm The Next function x x x A / T x x x A T C A C A T Step: 1 1 ? ? ? ? A T C A C A T
The KMP algorithm The Next function x x x A T C / x x x A T C A C A T Step: 1 1 2 ? ? ? ? A T C A C A T
The KMP algorithm The Next function / x x x x A T C A T Step: 1 1 2 4 ? ? ? A T C A C A T
The KMP algorithm The Next function x x x A T C A / T x x x x x A T C A C A T Step: 1 1 2 4 4 ? ? ? A T C A C A T
The KMP algorithm The Next function x x x A T C A T / C x x x x A T C A C A T Step: 1 1 2 4 4 5 ? ? A T C A C A T
The KMP algorithm The Next function x x x A T C / A x x x x A T C A C A T Step: 1 1 2 4 4 5 7 ? ? ? A T C A
The KMP algorithm The Next function x x x A T C A C / x x x A T C A C A T Step: 1 1 2 4 4 5 7 3 ? ? A T C A C A T
The KMP algorithm The Next function x x x A T C A C A / x x x A T C A C A T Step: 1 1 2 4 4 5 7 3 9 ? A T C A T
The KMP algorithm The Next function x x x A T C A C A / T x x A T C A C A T Step: 1 1 2 4 4 5 7 3 9 9 A T C A T
The KMP algorithm The Next function String: A T C A C A T 1 1 2 4 4 5 7 3 9 9 0 1 1 0 5 0 1 i = 1 2 3 4 5 6 7 8 9 10 Step: Next: Next[i] = i – Step[i]
Computation of the Next table i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *)
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 1 String A Next 0 k : 0 T C A C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 1 String A Next 0 k : 0 T C A C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 1 > 2 String A T Next 0 1 k : 0 > 1 C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 2 String A T Next 0 1 k : 1 > 0 C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 2 > 3 String A T Next 0 1 k : 0 > 1 C 1 A T C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 3 String A T Next 0 1 k : 1 > 0 C 1 A T C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 3 > 4 String A T Next 0 1 k : 0 > 1 C 1 A 0 T C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 4 String A Next 0 k : 1 T 1 C 1 A 0 T C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 4 > 5 String A T Next 0 1 k : 1 > 2 C 1 A 0 T C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 5 String A Next 0 k : 2 T 1 C 1 A 0 T 1 C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 5 > 6 String A T Next 0 1 k : 2 > 3 C 1 A 0 T 1 C 1 A C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 6 String A Next 0 k : 3 T 1 C 1 A 0 T 1 C 1 A C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 6 > 7 String A T Next 0 1 k : 3 > 4 C 1 A 0 T 1 C 1 A 0 C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 7 String A Next 0 k : 4 T 1 C 1 A 0 C A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 7 > 8 String A T Next 0 1 k : 4 > 5 C 1 A 0 T 1 C 1 A 0 C 5 A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 8 String A T C Next 0 1 1 k : 5 > 1 > 0 A 0 T 1 C 1 A 0 C 5 A T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 8 > 9 String A T Next 0 1 k : 0 > 1 C 1 A 0 T 1 C 1 A 0 C 5 A 0 T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 9 String A Next 0 k : 1 T 1 C 1 A 0 C 5 A 0 T
The KMP algorithm Building the Next function i : = 1; k : = 0; Next[1] : = 0; WHILE i < SLength DO WHILE (k > 0) AND (String[i]#String[k]) DO k : = Next[k] END; (* WHILE *) k : = k + 1; i : = i + 1; IF String[i] = String[k] THEN Next[i] : = Next[k] ELSE Next[i] : = k END; (* IF *) END; (* WHILE *) i : 9 > 10 String A T Next 0 1 k : 1 > 2 C 1 A 0 T 1 C 1 A 0 C 5 A 0 T 1
Actual KMP search j : = 1; i : = 1; WHILE (i <= SLength) AND (j <= TLength) DO WHILE (i > 0) AND (Text[j] # String[i]) DO i : = Next[i] END; (* WHILE *) i : = i + 1; j : = j + 1; END; (* WHILE *) IF i > SLength THEN RETURN j - SLength ELSE RETURN TLength END; (* IF *)
String Search Performance • Text length = n characters • String length = m characters • The Algorithms: – Brute Force • Worst case search time : O(n*m) – Knuth, Morris & Pratt (KMP - 1974) • Worst case search time : O(n+m) – Boyer & Moore (BM - 1977) • Similar to but slightly better than KMP.
- North bridge south bridge
- Diketahui suatu array segitiga memiliki 5 baris dan kolom
- Jagged array vs multidimensional array
- Associative array vs indexed array
- Broadside vs endfire
- Larik+adalah
- Sparse array adalah
- Perbedaan array 1 dimensi dengan array 2 dimensi
- Photovoltaic array maximum power point tracking array
- Blind search
- Search by image
- Binary search in design and analysis of algorithms
- Interpolation search formula
- Searching algoritma
- Federated discovery
- èinterest
- Federated search vs distributed search
- Informed and uninformed search
- Images search yahoo
- Best first search in ai
- Blind search dan heuristic search
- Video.search.yahoo.com search video
- Yahoo search videos
- Advantages and disadvantages of linear search
- Search by image
- Yahoo com tw
- Multilingual semantical markup
- Which search strategy is called as blind search
- Tw.search.yahoo.com
- Computational thinking algorithms and programming
- Types of algorithm
- Ackermann function
- 1001 design
- Safe patient handling algorithms
- Recursive algorithms
- Types of randomized algorithms
- Process mining algorithms
- Evolution of logistics ppt
- Nature-inspired learning algorithms
- Tabu search tsp
- Making good encryption algorithms
- An introduction to the analysis of algorithms
- Statistical algorithms
- Data structures and algorithms iit bombay
- Disadvantages of greedy algorithm
- N/a greedy
- What is global state in distributed system
- Classical algorithms for forrelation
- Aprioti
- Dsp programming tutorial
- Distributed algorithms nancy lynch
- What is analysis of algorithm
- Association analysis: basic concepts and algorithms
- Web mining algorithms
- Computer arithmetic: algorithms and hardware designs
- Princeton data structures and algorithms
- Badrinath
- Data structures and algorithms tutorial
- Lossless compression algorithms in multimedia