Functional Problem Solving (CSC 151 2013F) : EBoards

CSC151.02 2013F, Class 45: Binary Search


Overview

Preliminaries

Admin

Questions on the Project

The problem of searching

Context: Collection of structured values

(define people
  (vector 
    ("Aanderson" "Aan"    2017 4114 "x4410")
    ("Brown"     "Bruin"  2016 8123 "x9000")
    ("Doe"       "J"      2018 9999 "none")
    ("Mitchell"  "Alexander" 2000 1234 "X1111")
    ("Smith"     "Kieran" 2015 4112 "x9231")
    ("Tailor"    "Mic"    2017 1234 "x0001")
  ))

e Given that we've put things in a vector, and each thing is a list of the given form, how do we find something?

Suppose we wanted to write a generalized procedure?

(define search-vector (lambda (vector key get-key)

(search-vector people 4112 cadddr)

(search-vector people "Mitchell, Alexander" (lambda (entry) (string-append (car entry) ", " (cadr entry))))

(search-vector people "Alex" (lambda (entry) (substring (cadr entry) 0 4)))

How many items do we typically have to look through to decide someone is not there?

Making searching more efficient using divide-and-conquer

A demo: Destructive binary search

Considering the parameters to binary search

Lab


Samuel A. Rebelsky, rebelsky@grinnell.edu

Copyright (c) 2007-2013 Janet Davis, Samuel A. Rebelsky, and Jerod Weinman. (Selected materials are copyright by John David Stone or Henry Walker and are used with permission.)

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.