我是第一年的计算机工程专业的学生,我在这里很新。在过去的三个半月里,我一直在学习Java,在此之前我已经学习了六个月的C ++。我对Java的了解仅限于定义和使用自己的方法,面向对象编程的绝对基础知识,如使用静态数据成员和成员可见性。
今天下午,我的计算机编程教授教我们Java中的多维数组。关于多维数组只是数组的数组,依此类推。他提到,在名义教育编程中,几乎从不使用超过2维的数组。甚至3D阵列也仅在绝对必要的地方使用,例如执行科学功能。这使得4D数组几乎不使用,因为使用它们会显示“你使用错误的数据类型”,这是我教授的话。
但是,我想编写一个程序,其中使用任何数据类型,原始或其他数据的4D数组是合理的。该程序不能像打印数组元素那样简单。
我不知道从哪里开始,这就是我在这里发布的原因。我想要你的建议。我们也欢迎相关的问题陈述,算法和代码片段。
谢谢。
编辑:忘记提及,我完全不知道在Java中使用GUI,所以请不要发布实现GUI的想法。
答案 0 :(得分:6)
思路:
<击> - 矩阵乘法,它的应用就像在图中找到最短路径 - 求解方程组 - 密码学 - 许多密码协议以矩阵的形式表示数据或密钥或其内部结构。 - 图表上表示为矩阵的任何算法 击>
我一定是对矩阵有一些固定,抱歉:)
对于4D阵列,我能想到的一个显而易见的事情是3D环境的表示随时间变化,因此第4维代表时间尺度。或者任何具有附加关联属性的3D表示,放置在数组的第四维中。
答案 1 :(得分:4)
您可以创建一个包含4维的Sudoku超立方体,并将用户输入的数字存储到4维int数组中。
答案 2 :(得分:4)
只是支持他,...你的教授是对的。对于在生产代码中使用4D +数组的人来说,我恐怕身体暴力。
有点很酷,能够进入超过3个维度作为教育练习,但对于实际工作,它使事情方式太复杂,因为我们不是真的对大于3维的结构有很多理解。
难以想出4D +阵列的实际用途的原因是因为在现实世界中(几乎)没有任何复杂的模型。
你可以研究像tesseract那样的建模,这是(用外行的术语)4D立方体,或者Victor建议使用第4维来模拟恒定时间。
HTH
答案 3 :(得分:3)
一种用途可能是将动态编程应用于一个带有4个整数参数f(int x,int y,int z,int w)
的函数。为了避免反复调用这个昂贵的函数,可以将结果缓存到4D数组results[x][y][z][w]=f(x,y,z,w);
中。
现在你只需找到一个昂贵的整数函数,其中arity为4,哦,并且需要经常计算它...
答案 4 :(得分:2)
有许多可能的用途。正如其他人所说,你可以建模一个超立方体或者使用超立方体的东西以及随时间变化的建模。但是,还有许多其他可能的用途。
例如,我们宇宙的理论模拟模型之一使用了第11维物理学。您可以编写一个程序来模拟这些假设的物理外观。用户只能看到明显限制可用性的三维空间,但第四维坐标可以像改变通道一样,允许用户改变他们的视角。例如,如果发生第四维爆炸,您甚至可能需要第五维数组,以便您可以在每个连接的三维空间中模拟它的样子以及它在每个时间帧中的外观。
要远离科学,请考虑一下MMORPG。今天许多游戏都使用&#34; instanced&#34;这意味着创建给定区域的副本专门用于给定的一组玩家,以防止滞后。如果这是&#34;实例&#34;概念被赋予了第四维坐标,它允许玩家在实例之间转换位置,它可以有效地允许所有服务器世界合并在一起,同时允许玩家在降低成本的同时对他们去的地方进行大量控制。
当然,您的问题想要在不使用GUI的情况下了解想法。由于您在2D环境中工作,这有点困难。一个真正的应用是微积分。我们有3D图形计算器,但对于更高的尺寸,您几乎必须手动完成。旨在为您解决这些计算的图表可能无法正确显示信息,但您当然可以计算出来。此外,当hologaphic界面成为普遍存在的现实时,有可能在3D中表示超立方图,使这样的程序有用。
您可以编写基于文本的棋盘游戏,其中棋子的位置用文字表示。您可以添加尺寸和游戏规则来使用它们。
我能给你的最简单的想法是一个保存状态系统。在每个间隔,内存中的程序被复制并存储到文件中。它的坐标是它的时间位置。在面值处,您可能不需要4D数组来处理此问题,但假设您正在保存使用3D数组的状态的程序。您可以将其设置为将每个已保存状态表示为您可以使用的位置,然后查看时间变化。
答案 5 :(得分:1)
我不确定你能用这个具体做什么,因为我刚开始考虑它。但你可能会使用4D阵列进行某种基本的物理模拟,比如建模涉及一些风值的射弹飞行而不是。刚想到这一点,因为术语4D总是让人想起任何物体的“位置”是4个值,时间是第4个。
答案 6 :(得分:1)
作为一名物理学生,我们只有3维空间,而第4维就是时间。因此,以这种方式思考,我们可以想到一个值随时间变化的任何维数(1D或2D或3D)数组,或者一个保留值随时间变化的每个数组的记录的数组。 这对我们来说似乎是众所周知的。例如,我们通常在教室中使用的“出勤登记册”。
这是我的看法。
就是这样。 享受:-)
答案 7 :(得分:0)
给出Ishtar's answer的具体示例:四字符串对齐。要计算最佳的两串对齐方式,您可以沿着2D数组(矩阵!)的一个(例如,水平)轴写一个字符串,而沿着另一个数组写一个字符串。该数组充满了编辑成本,并且两个字符串的最佳对齐方式是产生最低成本的字符串,与通过矩阵的路径相关联。找到这种路径的常见方法是通过上述动态编程。您可以查找“ Levenshtein距离”或“编辑距离”以获取技术详细信息。
基本思想可以扩展为任意数量的字符串。对于四个字符串,您需要一个四维数组,以便沿其中一个维写每个字符串。
但是,实际上,由于至少两个原因,并没有以这种方式完成多字符串对齐:
缺乏灵活性:为什么您需要精确对齐 四个字符串?例如,在计算分子生物学中,您可能希望对齐许多字符串(以为DNA序列),并且它们的数目事先未知,但很少有四个。您的程序对于非常有限的一类问题很有用。
时空上的计算复杂性。这些要求的维数是指数级的,因此对于大多数实际目的而言,该方法是不切实际的。此外,此类多维数组中的大多数条目都位于此类次优路径上,这些路径甚至从未被触及过,因此存储它们只会浪费空间。
因此,出于所有实际目的,我相信您的教授是对的。