gpt4 book ai didi

Java 还是 C++ 适用于我特定的基于代理的模型 (ABM)?

转载 作者:太空狗 更新时间:2023-10-29 22:53:25 26 4
gpt4 key购买 nike

不幸的是,我需要开发一个基于代理的模型。我的背景是 C++;我很体面,但不是专业的程序员。我的目标是确定,撇开我的背景不谈,用 C++ 或 Java 编写以下算法是否会更快或更容易。

  1. 我的特工将属于 Host .他们的私有(private)成员变量包括他们对不同菌株的感染和免疫状态(类型 int )。 (在 C++ 中,我可能会使用 unordered_mapvector 来保存此信息,具体取决于菌株的数量。)我计划跟踪 vector 中的所有主机,vector< Host *> hosts 。 .
  2. 该程序需要随时了解所有感染了特定毒株或对特定毒株具有免疫力的特定宿主。因此,对于每个菌株,我可以维护两个独立的结构,例如 vector< Host *> immune vector< Host *> infectious (我可能会制作每个二维的,按菌株和宿主索引)。
  3. 宿主会死亡。这似乎在 C++ 中造成了困惑,因为我必须找到合适的人来杀死 host并搜索其他结构( immuneinfectious )以找到指向该对象的所有指针。 我的印象是,如果我删除底层对象,Java 会隐式删除所有这些指针。这是真的吗?在 C++ 中,有没有比我这里提供的方法更好的方法?

在此先感谢您的帮助。


我应该补充一点,如果我使用 C++,我将使用智能指针。也就是说,当对象需要离开时,我仍然没有看到一种巧妙的方法来删除指向该对象的所有指针。 (当宿主死亡时,我想将其从内存中删除。)

我意识到在 Java 中有很多东西需要学习。我希望对这些语言之间的差异有更多看法并且能够理解我需要做什么(上文)的人可以告诉我一种语言是否明显比另一种语言更有效。

最佳答案

I'm under the impression that Java will delete all these pointers implicitly if I delete the underlying object. Is this true?

没有。你实际上把它倒过来了;如果删除所有指针,Java 将删除底层对象。因此,您仍然需要搜索所有三个数据结构(hostsimmuneinfectious)以杀死该特定主机。

但是,如果您使用正确的数据结构,这种“搜索”将变得快速而简单; HashSet 可以很好地完成这项工作。


private HashSet<Host> hosts;
private HashSet<Host> immune;
private HashSet<Host> infectious;

public void killHost(Host deadManWalking) {
hosts.remove(deadManWalking);
immune.remove(deadManWalking);
infectious.remove(deadManWalking);
}

真的就这么简单,而且会在 O(lg n) 时间内完成。 (尽管您必须在 Host 的实现中覆盖 equalshashCode 方法;这在技术上没有挑战性。)

我对 C++ 的内存太模糊了,无法对这两种语言进行任何形式的权威比较;我在大学里做了很多 C++ 的工作,从那以后就再也没有碰过它。 C++代码会运行得更快吗?如果做得好并假设您没有任何内存泄漏,我怀疑它会,尽管 Java 作为一种慢速语言的代表主要是它年轻时的遗留问题;这几天很不错。更容易写?好吧,假设你会学习这门语言,可能不会。但是从 C++ 到 Java 的学习曲线非常平缓,我个人一点也不怀念 C++。一旦您了解了这些语言,在我看来,使用 Java 会容易得多。 YMMV,当然,但这对您来说可能是值得的。

关于Java 还是 C++ 适用于我特定的基于代理的模型 (ABM)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2419857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com