A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://mail.python.org/pipermail/python-list/2005-September/323129.html below:

List of integers & L.I.S. (SPOILER)

List of integers & L.I.S. (SPOILER)Bryan Olson fakeaddress at nowhere.org
Sun Sep 11 19:43:15 EDT 2005
Tim Peters wrote:
 > [Bryan Olson, on the problem at
 >     http://spoj.sphere.pl/problems/SUPPER/
 > ]
 >
 >>I never intended to submit this program for competition. The
 >>contest ranks in speed order, and there is no way Python can
 >>compete with truly-compiled languages on such low-level code.
 >>I'd bet money that the algorithm I used (coded in C) can run
 >>with the winners. I also think I'd wager that the Python version
 >>outright trumps them on code size.
 >
 > Oh, it's not that bad <wink>.  I took a stab at a Python program for
 > this, and it passed (3.44 seconds).
[...]
 > I didn't make any effort to speed this, beyond picking a reasonable
 > algorithm, so maybe someone else can slash the runtime

Hmmm ... I used the Theta(n lg n) algorithm ... how the heck...
Aha! The 'bisect' module changed since last I looked. It still
has the Python implementation, but then the last few lines say:

     # Overwrite above definitions with a fast C implementation
     try:
         from _bisect import bisect_right, bisect_left, insort_left, 
insort_right, insort, bisect
     except ImportError:
         pass

Binary-search is the inner-loop in this algorithm. I wrote my
own binary-search, so I was executing Theta(n lg n) Python
statements. Tim's use of bisect means that his inner-loop is
in C, so he does Theta(n) Python statements and Theta(n lg n) C
statement.

The key to fast Python: use a good algorithm, and keep the inner
loop in C.


-- 
--Bryan

More information about the Python-list mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4