Saturday, 24 May 2008

Bespoke Software

Bespoke Software design often requires the scalability of the algorithms involved to be determined first on a conceptual finite state machine in order to be sure that the tasks can actually be done prior to the software coding. For example, to determine the maximum number of products on an ecommerce website page for a given amount of bandwidth. The big Oh notation describes how the size of the input affects these sorts of hardware requirements.

Bespoke software solutions can be categorised into complexity classes. The measure is done against a turing machine, which is an infinite tape divided into columns each containing a symbol from an alphabet. A head reads/writes symbols on the tape and can move left/right one column at a time and the state of the system is stored in the state register. A table of instructions is used so that given the state the machine is currently in, and the symbol it is reading on the tape, tells the machine to erase or write a symbol; move the head one step or assume the same state (or new state). A program can belong to one of a number of complexity classes.

  • A software solution whose run time is no greater than a polynomial function of the size of the input is of the P complexity class and is efficient and tractable. For example, a quicksort program to sort products sort on database by price is a polynomial time algorithm.
  • An exponential software solution is on the other hand is limited by hardware resources. The time taken to do a task increases as an exponent to the amount of information that needs to be handled. In search engine optimisation, the time it takes for a search engine web crawler to traverse a website increases exponentially for each subpage and subpage thereafter, which is a reason why it is generally bad practice to have directories many layers deep.

No comments: