developing algorithms