小编mrM*_*uin的帖子

Bentley-Ottmann 算法:Java 中的交换操作

我正在尝试在 Java 中实现 Bentley-Ottmann 算法,但一直停留在实际实现处理交点时所需的交换操作(参见:维基百科上的 Bentley-Ottmann )。

如果我正确理解该算法,则有 3 种不同类型的事件点:

  1. 起点:这是线段的最左边的点,将此线段添加到树中并检查它是否与该线段正上方和下方的线段相交(如果存在)
  2. 终点:这是线段的最右边的点,从树中删除该线段并检查正上方和下方的线段是否彼此相交
  3. 交点:这是两个线段的交点,交换两个线段在树中的位置[...]

(我省略了很多细节,因为它们与这里不太相关)

我使用 aTreeMap作为我的数据结构来存储我的段。我不认为有一个swap操作TreeMaps可以让你只交换两个元素,所以这就是我陷入困境的地方。

java algorithm geometry computational-geometry

3
推荐指数
1
解决办法
369
查看次数

Prolog - 实施埃拉托色尼筛法时出现问题

我正在尝试在序言中编写一个程序,查找所有素数达到极限N,我试图通过使用埃拉托斯特尼筛法来实现这一点。我对序言非常陌生,所以我还没有真正掌握递归思考的艺术(你可能可以在我的代码中看到这一点)。

尽管如此,我(或多或少)尝试在序言中实现该算法,但并没有达到您将在此处看到的程度:

 allPrimes(N, Primes) :-
     numlist(2, N, Numlist),
     A is round(sqrt(N)),
     foreach(between(2, A, _i), sift(_i, Numlist, Primes)).

 sift(_i, Numlist, Primes) :-
     findall(_j, (member(_j, Numlist), _j \== _i, (_j mod _i =:= 0)), L),
     subtract(Numlist, L, Primes).
Run Code Online (Sandbox Code Playgroud)

我不断获得false输出,因为subtract(Numlist, L, Primes)失败,我猜测它失败的原因是因为Primes它已经被实例化并且它的值无法更改。我尝试过用其他方式解决这个问题,但无法想出解决方案。

非常感谢任何指导我正确方向的帮助!

prolog sieve-of-eratosthenes

1
推荐指数
1
解决办法
636
查看次数