Skip Menu |

This queue is for tickets about the Graph CPAN distribution.

Report information
The Basics
Id: 92427
Status: resolved
Priority: 0/
Queue: Graph

People
Owner: Nobody in particular
Requestors: derhoermi [...] gmx.net
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: Graph::delete_vertex should not use _edges_at (in all cases)
Date: Fri, 24 Jan 2014 00:02:52 +0100
To: bug-graph [...] rt.cpan.org
From: Bjoern Hoehrmann <derhoermi [...] gmx.net>
Hi, In Graph.pm v0.96 the `delete_vertex` function is excruciatingly slow, at least for the graphs I usually handle. Devel::NYTProf told me this is caused by _edges_at. I have also found that retrieving and deleting the edges around a vertex I want to delete is very fast, so sub delete_vertex_fast { my $g = shift; $g->expect_non_unionfind; my $V = $g->[ $g->SUPER::_V ]; return $g unless $V->has_path( @_ ); $g->delete_edge($_[0], $_) for $g->successors($_[0]); $g->delete_edge($_, $_[0]) for $g->predecessors($_[0]); $V->del_path( @_ ); $g->[ $g->SUPER::_G ]++; return $g; } is something I am considering using in a derived package. Testing shows a speedup of an order of magnitude at least (and I intend to test this is kept in proper working condition by cloning random graphs, deleting the same random vertices in both of them, and comparing the result). If a new maintainer is found for the module, I am happy to write a patch. regards, -- Björn Höhrmann · mailto:bjoern@hoehrmann.de · http://bjoern.hoehrmann.de Am Badedeich 7 · Telefon: +49(0)160/4415681 · http://www.bjoernsworld.de 25899 Dagebüll · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/
The fast version looks nice, thanks.