标签: b-prolog

BProlog 8.1中不均匀的制表性能

我用版本8.1 的表格功能做了一些实验, 并且对我观察到的性能感到非常惊讶.

这是我使用的代码.它计算将一些正整数减少到以下所需的Collat​​zN数:I1

%:- table posInt_CollatzSteps/2.               % remove comment to enable tabling
posInt_CollatzSteps(I,N) :-
   (  I == 1
   -> N = 0                                                % base case
   ;  1 is I /\ 1 
   -> I0 is I*3+1, posInt_CollatzSteps(I0,N0), N is N0+1   % odd
   ;  I0 is I>>1,  posInt_CollatzSteps(I0,N0), N is N0+1   % even
   ).
Run Code Online (Sandbox Code Playgroud)

要确定从所有整数需要减少最大步数I0I:

i0_i_maxSteps0_maxSteps(I0,I,M0,M) :-
   (  I0 > I
   -> M0 = M
   ;  posInt_CollatzSteps(I0,N0),
      I1 is …
Run Code Online (Sandbox Code Playgroud)

performance prolog memoization b-prolog prolog-tabling

5
推荐指数
0
解决办法
139
查看次数