stats: speed up the computation of transitions

Juraj Major reported a case with 32 APs where ltlcross would take
forever to gather statistics.  It turns out that for each edge,
twa_sub_statistics was enumerating all compatible assignments of 32
APs.  This uses bdd_satcountset() instead, and also store the result
in a long long to avoid overflows.

* spot/twaalgos/stats.cc (twa_sub_statistics): Improve the code for
counting transitions.
* bin/common_aoutput.hh, bin/ltlcross.cc, spot/twaalgos/stats.hh:
Store transition counts are long long.
* tests/core/readsave.test: Add test case.
* NEWS: Mention the bug.
This commit is contained in:
Alexandre Duret-Lutz 2020-05-18 16:52:31 +02:00
parent 4608d9a5b1
commit d25fcb23eb
6 changed files with 45 additions and 21 deletions

View file

@ -1,5 +1,5 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2008, 2011-2017 Laboratoire de Recherche et
// Copyright (C) 2008, 2011-2017, 2020 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
@ -44,7 +44,7 @@ namespace spot
struct SPOT_API twa_sub_statistics: public twa_statistics
{
unsigned transitions;
unsigned long long transitions;
twa_sub_statistics() { transitions = 0; }
std::ostream& dump(std::ostream& out) const;
@ -125,7 +125,7 @@ namespace spot
printable_formula form_;
printable_value<unsigned> states_;
printable_value<unsigned> edges_;
printable_value<unsigned> trans_;
printable_value<unsigned long long> trans_;
printable_value<unsigned> acc_;
printable_scc_info scc_;
printable_value<unsigned> nondetstates_;