Tag: 算法

二维光线跟踪器的算法

我想用Java编写一个程序化的RayTracer用于演示目的,同时提供有关Ray Tracing的演示文稿(也提到3D,这个2D模型应该只是为了更容易理解,并培养我的一般Java知识)。 我的问题是,我不知道从哪里开始这整个事情。 我要尝试的第一件事是使用向量来跟踪给定坐标(例如我的鼠标光标的位置)的屏幕上的每个像素。 然后我会计算向量是否与多边形相交,然后我会在那里停止向量并仅将它绘制到这个特定点。 也许我甚至可以通过计算法线来绘制一些阴影,并以较低的强度reflection另一个方向的矢量。 那么从A = {everypixelonthescreen}绘制一个向量到特定的Point P并计算交叉Point P是一个好主意吗? 完成的版本应该看起来像这样:

HashSet的迭代顺序

如果添加到java.util.HashSet的每个对象都以确定的方式实现Object.equals()和Object.hashCode(),则对于添加的每个相同元素集,HashSet上的迭代顺序保证相同, 而不管他们被加入的顺序? 奖金问题:如果插入顺序相同怎么办? (假设Sun JDK6具有相同的HashSet初始化。) 编辑:我原来的问题不明确。 它不是关于HashSet的一般契约,而是Sun在JDK6中实现的HashSet作为有关确定性的保证。 它本质上是非确定性的吗? 什么影响其迭代器使用的顺序?

色彩逻辑算法

我们正在构建一个体育应用程序,并希望在应用程序的各个部分中加入团队颜色。 现在每个团队都可以用几种不同的颜色来表示。 我想要做的是执行检查以validation两个团队颜色是否在彼此的特定范围内,以便我不显示两个相似的颜色。 因此,如果团队1的主要团队颜色的值为rgb(255,0,0)(或#FF0000),团队2的主要颜色相似,例如rgb(250,0,0),那么我们会选择不同的颜色其中一支球队的颜色。 如果可能,我可以采取什么方法来执行检查? 谢谢

查找数字字符串的下一个回文的更好算法

首先是问题所在: 如果正整数在从左到右和从右到左读取时在十进制系统中的表示相同,则称为回文。 对于给定的正整数K不超过1000000位,写入大于K的最小回文值输出。 始终显示数字而不带前导零。 输入:第一行包含整数t,即测试用例的数量。 整数K在接下来的t行中给出。 输出:对于每个K,输出大于K的最小回文。示例 输入: 2 808 2133 输出: 818 2222 其次这是我的代码: // I know it is bad practice to not cater for erroneous input, // however for the purpose of the execise it is omitted import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; import java.lang.Exception; import java.math.BigInteger; public class Main { public static […]

如何通过密钥获取锁定

在不锁定整个集合的情况下,防止在键值集中并发更新一个记录的最佳方法是什么? 从语义上讲,我正在寻找某种键的锁定(理想情况下,Java实现,但不一定): interface LockByKey { void lock(String key); // acquire an exclusive lock for a key void unlock(String key); // release lock for a key } 此锁用于同步对远程存储的访问,因此某些同步Java集合不是一个选项。

用于在NxN网格中查找所有路径的算法

想象一下,机器人坐在NxN网格的左上角。 机器人只能向两个方向移动:向右和向下。 机器人有多少可能的路径? 我可以在谷歌上找到解决这个问题的方法,但我对解释并不十分清楚。 我试图清楚地理解如何解决这个问题并在Java中实现的逻辑。 任何帮助表示赞赏。 更新:这是一个面试问题。 现在,我正试图到达右下角并打印可能的路径。

Java,找到两个数组的交集

我已经在这上面阅读了一些其他堆栈溢出线程: 在java中找到两个多重集的交集 如何将两个数组之间的交集作为新数组? public static int[] intersection (int [] x, int numELementsInX, int [] y, int numElementsInY) { 我试图检查两个数组以及它们的元素数(numElementsInX和numElementsInY),并返回一个新数组,其中包含数组x和y的公共值。 他们的交集。 Example,if x is{1,3,5,7,9}and y is{9,3,9,4} then intersection(x, 5, y, 4} should return {3, 9} or {9, 3} 我读过我需要使用LCS算法。 谁能给我一个如何做到这一点的例子? 数组中的数组和值都被初始化并在另一个方法中生成,然后传递到交集中。 任何帮助/澄清表示赞赏。 编辑代码 for (int i=0; i<numElementsInX; i++){ for (int j=0; j<numElementsInY; j++){ if (x[j]==x[i]) { […]

有效的gif /图像颜色量化?

所以我试图在我的Java应用程序中编码一些动画gif文件。 我一直在使用在线发现的一些类/算法,但似乎没有一个工作得很好。 现在我正在使用这个量化类将图像的颜色减少到256: http : //www.java2s.com/Code/Java/2D-Graphics-GUI/Anefficientcolorquantizationalgorithm.htm 问题是,它似乎并不是非常“聪明”。 如果我传入的图像超过256种颜色,它确实会减少颜色数,但效果不是很好。 (红色变成蓝色等 – 非常明显的错误就像这样)。 您可以推荐使用Java中的颜色量化的其他算法/库吗? 注意:我知道这个算法中使用的Neuquant: http : //www.java2s.com/Code/Java/2D-Graphics-GUI/AnimatedGifEncoder.htm 它非常慢并产生“eh”结果(帧之间的颜色闪烁)。

在Java中,如何高效优雅地传输树节点的后代?

假设我们有一组由唯一String标识的对象,以及一个定义它们层次结构的类Tree 。 该类使用从节点(由其ID表示)到其各自子节点ID的Collection的Map来实现。 class Tree { private Map<String, Collection> edges; // … public Stream descendants(String node) { // To be defined. } } 我想启用流式节点的后代。 一个简单的解决方案是: private Stream children(String node) { return edges.getOrDefault(node, Collections.emptyList()).stream(); } public Stream descendants(String node) { return Stream.concat( Stream.of(node), children(node).flatMap(this::descendants) ); } 在继续之前,我想对此解决方案做出以下断言。 (我对这些是正确的吗?) 从descendants返回的Stream消耗资源(时间和内存) – 相对于树的大小 – 与复制的手动编码的复杂程度相同。 特别是,表示迭代状态的中间对象( Stream s, […]