Java程序使用4D数组



我是计算机工程专业的一年级学生,我是新来的。在过去的三个半月里,我一直在学习Java,在那之前的六个月里,我一直在学习c++。我的Java知识仅限于定义和使用自己的方法,面向对象编程的绝对基础知识,如使用静态数据成员和成员可见性。

今天下午,我的计算机编程教授教了我们Java中的多维数组。多维数组就是数组的数组等等。他提到,在名义上的教育编程中,几乎从不使用超过2维的数组。即使是3D阵列也只在绝对必要的地方使用,比如执行科学功能。这使得4D数组的使用几乎为零,因为用我教授的话来说,使用它们表明"您使用了错误的数据类型"。

然而,我想写一个程序,其中使用4D数组,任何数据类型,基本或其他,是合理的。程序不能像打印数组元素那样简单。

我不知道从哪里开始,这就是为什么我在这里发布这个。我想听听你的建议。也欢迎提供相关的问题陈述、算法和代码片段。

谢谢。

编辑:忘了说,我完全不知道如何在Java中使用gui,所以请不要发表实现gui的想法。

创意:

<罢工>-矩阵乘法及其应用,如在图中找到最短路径-方程组的求解-密码学——许多密码学协议以矩阵的形式表示数据或密钥或其内部结构。-任何用矩阵表示的图上的算法

我一定是对矩阵有某种固定,抱歉:)

对于四维数组,我能想到的一个明显的事情是三维环境随时间变化的表示,所以四维表示时间尺度。或任何3D的表示,有附加的相关属性放置在第四维数组。

您可以创建一个4维的数独超立方体,并将用户输入的数字存储到一个4维int数组中。

一种用法可以将动态规划应用于接受4个整型参数f(int x,int y,int z,int w)的函数。为了避免一次又一次地调用这个昂贵的函数,您可以将结果缓存在4D数组results[x][y][z][w]=f(x,y,z,w);中。

现在你只需要找到一个复杂度为4的昂贵的整数函数,哦,而且需要经常计算它…

支持他,. .你的教授说得很对。我担心我可能会对任何在生产代码中使用4D+数组的人进行暴力攻击。

有点酷,能够进入大于3个维度作为教育练习,但对于实际工作,它使事情方式太复杂了,因为我们对大于3个维度的结构并没有太多的理解。

4D+数组难以实际应用的原因是,在现实世界中(几乎)没有什么复杂的建模。

你可以考虑建立像立方体这样的模型,这是(在外行人的术语中)一个四维立方体,或者像Victor建议的那样使用第四维来模拟常数时间。

HTH

有很多可能的用途。正如其他人所说,您可以对超立方体或利用超立方体的东西进行建模,也可以对随时间变化的变化进行建模。然而,还有许多其他可能的用途。

例如,我们宇宙的一个理论模拟模型使用了11维物理。你可以写一个程序来模拟这些假设的物理会是什么样子。用户只能看到3维空间,这显然限制了可用性,但4维坐标可以像改变通道一样,允许用户改变他们的视角。例如,如果发生了第四维度的爆炸,你甚至可能需要一个第五维度的数组,这样你就可以模拟它在每个相连的三维空间中的样子,以及它在每一帧时间中的样子。

让我们从科学的角度出发,想想MMORPG。如今,许多这类游戏都使用"实例化"地点,这意味着特定区域的副本是专门为特定玩家群体创建的,以防止延迟。如果这个"实例"概念被赋予一个第四维坐标,它允许玩家在实例之间移动他们的位置,它可以有效地让所有的服务器世界合并在一起,同时允许玩家在降低成本的同时大量控制他们去的地方。

当然,你的问题想知道不使用GUI的想法。这有点困难,因为你是在2D环境中工作。一个真正的应用是微积分。我们有三维图形计算器,但对于更高的维度,你几乎必须手工计算。旨在为您解决这些计算的程序可能无法正确显示信息,但您肯定可以计算它。此外,当全息界面成为广泛的现实时,可能有可能在3D中表示超立方体图,使这样的程序有用。

你也许可以编写一个基于文本的棋盘游戏,其中棋子的位置是用文本表示的。您可以添加维度和游戏规则来使用它们。

我能给你的最简单的想法是保存状态系统。每隔一段时间,内存中的程序被复制并存储到一个文件中。它的坐标是它在时间上的位置。从表面上看,您可能不需要4D数组来处理这个问题,但是假设您要保存状态的程序使用了3D数组。您可以将它设置为将每个保存的状态表示为您可以利用的时间位置,然后查看时间变化。

我不确定你能具体做些什么,因为我刚刚开始思考这个问题。但是你可以使用4D阵列进行一些基本的物理模拟,比如模拟一个包含风值的抛射飞行。这是因为4D这个词总是让人想到任何物体的"位置"是4个值,时间是第4个值。

作为一名物理学生,我们只有三维空间,但我们有第四个维度,即时间。这样一来,我们可以考虑一个任意维度的数组(一维、二维或三维),它的值随时间而变化,也可以考虑保存每个数组值随时间变化的记录的数组。我们似乎都很清楚。例如,我们通常在教室里有"考勤表"。

这是我对它的看法。

就是这样。喜欢:-)

给伊师塔的答案一个具体的例子:四弦对齐。为了计算最佳的双字符串对齐,您将一个字符串沿着2d数组(一个矩阵!)的一个轴(比如水平轴)写入,另一个字符串沿着另一个数组写入。数组中充满了编辑成本,两个字符串的最佳对齐方式是产生最低成本的,并与贯穿矩阵的路径相关联。找到这种路径的一种常用方法是通过上述动态规划。您可以查询'Levenshtein distance'或'edit distance'了解技术细节。

基本思想可以扩展到任意数量的字符串。对于四个字符串,您需要一个四维数组,以便沿着其中一个维度写入每个字符串。

然而,在实践中,多重字符串对齐不是这样做的,至少有两个原因:
  1. 缺乏灵活性:为什么您需要精确地对齐四个字符串??例如,在计算分子生物学中,您可能希望对齐许多字符串(想想DNA序列),它们的数量事先是不知道的,但很少是4个。你的程序只对非常有限的一类问题有用。

  2. 计算复杂度,在空间和时间。需求在维数上呈指数级增长,使得该方法对于大多数现实世界的目的来说不切实际。此外,这种多维数组中的大多数条目都位于这种次优路径上,甚至不会被触及,因此存储它们只是浪费空间。

所以,实际上,我相信你的教授是对的。

相关内容

  • 没有找到相关文章

最新更新