[Tutor] Finding the max value from a dictionary that does not exceed a variable's value.
Steven D'Aprano
steve at pearwood.info
Mon Feb 1 08:29:53 EST 2016
On Mon, Feb 01, 2016 at 12:47:02PM +0000, Oscar Benjamin wrote:
> On 31 January 2016 at 05:50, srinivas devaki <mr.eightnoteight at gmail.com> wrote:
> > On Sun, Jan 31, 2016 at 3:54 AM, Danny Yoo <dyoo at hashcollision.org> wrote:
> >> ---
> >> I want to take the max value in the dictionary 'coinvalues' that is the
> >> same as or lower than the variable 'change'. I have no idea how to search
> >> through the 'coinvalues' dictionary and find the value that is highest but
> >> does not exceed the value held in the variable 'change'.
> >> ---
> >
> > although OP's problem doesn't need this, is there a better way achieve
> > this other than
> > using a balanced binary search tree.
>
> You would need to state all of the requirements for your data
> structure. If coinvalues is constant then you can use a list and the
> bisect module:
>
> https://docs.python.org/3.5/library/bisect.html
>
> That gives O(log(len(coinvalues))) lookup.
There are unlikely to be more than dozen distinct coins. Australia has
$2, $1, 50¢, 20¢, 10¢, 5¢ coins. Even if you include the obsolete 2¢ and
1¢ coins, that's only eight. I believe the US has $1, 50¢ (half dollar),
25¢ (quarter), 10¢ (dime), 5¢ (nickel), 1¢ (penny).
You're unlikely to beat a straight linear search with only a few coins
like this. Binary search has much more overhead. Especially since the
coin change problem doesn't really require a search: just iterate over
each coin in turn.
--
Steve
More information about the Tutor
mailing list