草庐IT

algorithm

全部标签

java - 我怎样才能修改这个视线算法来接受穿过角落的光线?

我正在研究一种基于Theta*的寻路算法,它是A*的一种变体,它提供了一个很好的寻路系统,它不受网格的限制,即使地形/障碍物是基于网格模式的。该系统需要一种视线算法来确定特定路径是否被阻挡。我找到了this非常有用的视线算法,我已经在我的代码中成功地实现了它。不幸的是,它认为以下是无效路径:但是,出于我的目的,我希望这样的路径被认为是有效的。我试图通过使用基本y=mx+b公式检测点是否在线上来修改算法,但算法的不一致使我无法依赖这样的系统。是否有任何有效的方法来修改此算法以允许这样的路径?还有另一种算法会更好吗?请记住,路径的起点和终点不一定必须限制在网格中,因此所有点都使用doubl

java - 计算所有可能的组合

前言考虑一个包含12个元素的列表、数组或字符串,具有不相关的值(假设为E)。每个元素最多可以链接到另一个相邻元素,或者如果它是列表的最后一个元素,它可以链接到第一个元素。有效列表示例,其中破折号表示链接,“E”表示元素。EEEEEEEEEEEEEE-EE-EEEE-EE-EEEEE-EEE-EE-EEEE-无效列表的示例。E-E-EEEEE-EEEEE-问题我想计算唯一列表的总数,并打印它们。要解决这个问题,表示数据的最佳方式可能是什么?最好实现一个特定于这个问题的数据结构吗?我希望用Java实现它,但如果您认为其他语言更适合,我愿意接受建议。为什么这不是作业问题。我们的想法是在12/

java - 请使用 "Hugo Elias"算法生成波形! java

我最近的项目似乎碰壁了,涉及图像上的波浪/波纹生成。我制作了一个可以在网格上使用基本颜色的完美作品;哎呀,我什至根据波浪的高度为颜色添加了阴影。但是,我的总体目标是让这种效果像您看到的那样作用于图像here.我遵循的是一种人们称之为HugoElias方法的算法(如果他真的提出了设计,我就不知道了)。他的教程可以找到here!在学习该教程时,我发现他的伪代码很难理解。我的意思是,在我点击图像上的高度图部分之前,这个概念在很大程度上是有意义的。问题是x和y偏移量会抛出ArrayIndexOutOfBoundsException,因为他将偏移量添加到相应的x或y。如果波浪太大(即在我的例子中

java - 有 3 个容器(2 个满的和 1 个空的)并尝试从中创建 x 数量

注意:遇到下面这个问题,想把问题归纳并实现,结果发现并不容易。这个问题让我发疯。这不是家庭作业问题,只是出于好奇。问题Therearethreecontainerswhosesizesare10pints,7pintsand4pintsrespectively.The7-pintand4-pintcontainersstartoutfullofwater,butthe10-pintcontainerisinitiallyempty.Sincetherearenomarksonthecontainers,youcanpourthecontentsofonecontainerintoano

java - 我认为维基百科上的 Java 矩阵链乘法算法不正确

我几乎可以肯定维基百科页面上matrixChainOrder的Java实现,MatrixChainMultiplication,是不正确的。我会改变它,但我不是一个合格的数学家,并且在没有首先审查我的观察的情况下做出改变是不舒服的。我想我要问的是——我的说法是否正确?k应该改为k+1,因为这个版本是用基于零的索引编写的,这与在同一页面上首次引入的伪代码版本不同。protectedint[][]m;protectedint[][]s;publicvoidmatrixChainOrder(int[]p){intn=p.length-1;m=newint[n][n];s=newint[n][

java - 导致冲突的位模式的什么属性?

我正在阅读有关Java随机化哈希键的方法here显然,这个想法是为了确保低位是“随机的”以帮助分发,但我正在尝试更多地了解这一点。所以如果我们有一个大小为10的表,那么数字0、10、20、30、40等都落在桶0中,数字1、11、21、31等落在桶1中等(使用模10)。因此,更改位模式可以使它们进入不同的存储桶,而不是全部进入存储桶0。但是我不清楚的是,是什么属性使低位位影响了这一点,我们需要将它们随机化。所以我们有:00000000(0)00001010(10)00010100(20)00011110(30)00101000(40)低位有什么规律使它们放在同一个槽位?也许我对以下内容感

java - TicTacToe minimax 算法在 4x4 游戏中返回意外结果

在我的方法newminimax499中,我有一个利用内存和alphabeta修剪的minimax算法。该方法通常适用于3x3游戏,但是当我玩4x4游戏时,我会得到奇怪的、意想不到的计算机位置选择。他仍然从不输,但他似乎并不是为了赢而比赛。为了说明这里的问题,我们使用2个3x3和4x4游戏的场景。首先是一个3x3游戏的场景,其中玩家是X并迈出第一步:这还不错,事实上,这正是人们希望计算机执行的操作。现在来看一个4x4游戏的场景。同样,O是计算机,X启动:如您所见,计算机只是将Os一个接一个地按系统顺序排列,只有在它有可能获胜时才打破该顺序来阻止X。这是非常防守的打法,不像在3x3比赛中看

c# - Bentley-Ottmann 算法实现

C#或Java中是否存在任何现有的Bentley-Ottmann算法实现/库? 最佳答案 这里至少有一个C++实现(包括描述):http://softsurfer.com/Archive/algorithm_0108/algorithm_0108.htm 关于c#-Bentley-Ottmann算法实现,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8113263/

java - Coin change DP解决方案来跟踪硬币

尝试为一般硬币找零问题编写DP解决方案,同时跟踪使用了哪些硬币。到目前为止,我一直在努力为我提供所需的最少硬币数量,但无法弄清楚如何获得使用了哪些硬币以及使用了多少次。如果使用硬币,我尝试用值设置另一个表(boolean值),但这似乎无法正常工作。有什么想法吗?publicstaticintminChange(int[]denom,intchangeAmount){intm=denom.length;intn=changeAmount+1;int[][]table=newint[m][n];boolean[][]used=newboolean[m][n];for(intj=0;j=0;

java - 过滤掉时间复杂度为 O(n) 的列表元素

我有一个元素列表,其中每个元素都是一个非负整数范围。我想以仅分离出最大的未封闭范围的方式过滤列表。我想通过单循环以O(n)方式执行此操作。此列表将始终根据每个范围的起始整数排序。封闭范围元素可能出现在列表中封闭范围元素之前或之后。示例:假设我的列表是{[0-12],[5-15],[5-20],[10-20],[11-30],[25-42],[28-40]}。在此列表中,范围[5-15]和[10-20]属于[5-20]范围,因此我需要丢弃他们。类似地,范围元素[28-40]被丢弃,因为它落在范围[25-42]内。我想使用单个循环执行此过滤以实现O(n)时间复杂度。这有可能实现吗?如果不是