I see. What is the task in detail? Are some of the set fixed or known in advance? What's the argument against a bitset-based solution?
Cheers, Steffen Am 27. Oktober 2017 19:10:35 MESZ schrieb Stephane Ducasse <stepharo.s...@gmail.com>: >It was for test inclusion of UTF-8 characters so we do not want to >rely on external libraries. > >On Fri, Oct 27, 2017 at 1:54 PM, Steffen Märcker <merk...@web.de> >wrote: >> Dear Andrew, >> >> I didn't find time to answer earlier. Some time ago, I was looking >for a >> (MT)BDD package in ST as well. I didn't found one. So the only two >options >> left are >> >> 1) implementing a new BDD lib in ST and >> 2) doing FFI to some existing lib, e.g. CUDD, Sylvan, Jinc >> >> I'd prefer 2) since the existing libraries are feature-rich and >highly >> optimized - which took quite some time. As a bonus, a solution could >> potentially switch between those backends. The biggest hurdle, in my >option, >> is memory management, since most libs use some sort of reference >counting. >> And you do not want to end up with nightmarish dozens of ref(bddNode) >> deref(bddNode) in your application code (like the probabilistic model >> checker PRISM does). This introduces hard to track bugs easily. >However, I >> have an idea in mind how to tackle this but I didn't found the time >to put >> it into code yet. >> >> May I ask, which sort of application do you have in mind? >> >> Best, Steffen >> >> >> >> >> Am .10.2017, 07:54 Uhr, schrieb Prof. Andrew P. Black ><bl...@cs.pdx.edu>: >> >>> Thanks for the responses so far. I see that I need to clarify my >enquiry. >>> >>> B-Trees and BDDs are not the same. BDDs are an efficient and >compact >>> representations for Boolean functions, sometimes used in SAT-solvers >and >>> electronics design. The key idea is that since the output must be >0 or 1, >>> you can represent any Boolean function as a tree whose depth is the >same as >>> the number of bits in the input. >>> >>> To make the tree small and efficient, though, you need to eliminate >any >>> node whose two children are the same, and to share subtrees, so that >you >>> really get a DAG, not a tree. The full name for these efficient >compressed >>> trees is “Reduced Order Binary Decision Diagrams”, or ROBDDs. I was >hoping >>> that someone else had implemented the algorithms necessary to build >this >>> representation. >>> >>> Because sets can be considered to be Booleans functions (true => >argument >>> is in the set), you can use ROBDDs to efficiently represent large >sets. >>> >>> To be clear, despite the word “diagram” in the name, one is not >normally >>> interested in drawing the BDD — except in the documentation for the >package >>> ;-). Normally, BDDs they are used to represent sets, or functions, >where >>> the drawing would be hopelessly large. >>> >>> The BuDDy package (http://buddy.sourceforge.net/manual/main.html) is >an >>> example of what I’m looking for, but unfortunately it’s in C++. >>> >>> Andrew >>> >>> >>>> On 25 Oct 2017, at 21:39 , Stephane Ducasse ><stepharo.s...@gmail.com> >>>> wrote: >>>> >>>> Hi andrew >>>> >>>> I think that Avi did a package about BDD (but I thought it was >special >>>> binary trees) so this is probably the same. >>>> Did you check on Squeaksource? >>>> http://www.squeaksource.com/BTree.html >>>> If this is what you are looking for I can help porting it to Pharo. >>>> >>>> Stef >>>> >>>> >>>> On Wed, Oct 25, 2017 at 9:02 PM, Prof. Andrew P. Black ><bl...@cs.pdx.edu> >>>> wrote: >>>>> >>>>> Does anyone know of a BDD — that’s Binary Decision Diagram — >package >>>>> written in Smalltalk? >>>>> >>>>> Andrew >>>>> >>>>> >>>> >>> >>