如何避免动态图中的“堆指针意大利面条”?

2024-04-29

一般问题

假设您正在编写一个由图组成的系统,以及可以根据相邻节点的配置激活的图重写规则。也就是说,您有一个在运行时不可预测地增长/收缩的动态图。如果你天真地使用malloc,新节点将被分配在内存中的随机位置;经过足够的时间,你的堆将变成一个指针意大利面条,给你带来可怕的缓存效率。有没有什么轻量级的增量技术可以实现连接在一起的节点在内存中保持靠近?

我尝试过的

我唯一能想到的是将节点嵌入笛卡尔空间中,并通过一些物理弹性模拟来排斥/吸引节点。这会将有线节点保持在一起,但看起来很愚蠢,我猜模拟的开销会比缓存效率加速更大。

坚实的例子

This https://i.stack.imgur.com/eD36T.jpg是我正在尝试实施的系统。This http://paste.ofcode.org/34tfgELFk8HNSyDQd46wawB是我尝试用 C 语言优化的代码的一个简短片段。This https://github.com/MaiaVictor/optlam/blob/master/optlam.jsrepo 是 JS 中的一个原型、有效实现,具有糟糕的缓存效率(以及语言本身的效率)。这个视频 https://www.youtube.com/watch?v=lhNtgbFTXFE以图形方式显示系统的运行情况。


您要解决的是线性排列问题。完美的解决方案被认为是 NP 困难的,但存在一些很好的近似。这里有一个paper http://dl.acm.org/citation.cfm?id=760642这应该是一个很好的起点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免动态图中的“堆指针意大利面条”? 的相关文章

随机推荐

  • Netbeans 将 css 变量显示为错误

    当我使用 css 变量时 我的 Netbeans IDE 显示错误 例如 这行代码将返回错误 root main bg color dad66f title color var main bg color 我在网上找到了这个解决方案 htt
  • 尽管+ geom_line() 图表中没有线条

    我已阅读文档 我认为我的代码应该是正确的 但输出中的点之间仍然没有线条 怎么了 x 轴是离散的 y 轴是连续的 My code point sqrmPrice lt ggplot overview df aes x areaSize y s
  • Maven 依赖类型 ejb 与 jar

    有什么区别
  • jQuery CouchDB - 视图的过滤键

    我正在使用与 couchdb 捆绑在一起的 javascript 库来查询数据库 附带说明一下 这里很好地概述了它提供的功能 并提供了很多很好的示例 http bradley holt com 2011 07 couchdb jquery
  • 根据条件添加 vue 指令

    是否可以根据条件设置指令 我有一个 粘性 指令来使元素粘在屏幕上 我有一个正在使用的社交分享组件
  • 用户表中发生“数据操作操作在此视图上不合法”

    当我尝试在属于我正在使用的用户的表上插入值时 会发生此错误 SQL Error ORA 01732 data manipulation operation not legal on this view Cause Action 在人们所说的
  • .htaccess php_value include_path 不起作用

    我在当地有一个小项目 我在 Windows 下使用 XAMPP 工作 我的文件目录结构是 根目录 C xampp htdocs routes Under this folder I have my bootstrap php with th
  • python 中的最小堆

    我想通过定义自定义比较函数将一组对象存储在最小堆中 我看到有一个 heapq 模块作为 python 发行版的一部分可用 有没有办法在此模块中使用自定义比较器 如果没有 其他人是否构建了自定义最小堆 两个选择 除了 Devin Jeanpi
  • Android Studio 点击 Android 设备监视器时出现错误

    每当我单击 Android 设备监视器时 我都会在 android studio 中遇到此错误 Monitor An error has occurred See the log file C Users
  • 稍后如何附加到正在运行的 Docker 容器?

    我想简单地启动一个 docker 容器来执行一些 java 代码 最终启动 JBoss 这工作正常 只是我不知道如何再次连接到容器并返回到 bash 提示符 这就是我启动容器的方式 docker run i t p 80 80 v tmp
  • 如何在powershell中使用system.tuple?

    只是出于好奇 这不是 我必须拥有它 而是如何在 powershell 中使用 system tuple 类声明元组 我正在使用 powershell exe config 加载框架 4 0 但无法创建元组 尝试这个 PS C ps1 gt
  • igraph 中的颜色特定节点

    我正在尝试为节点 6 和 7 着色 无论从对象 d 中选择什么字母 g lt graph from literal 1 2 3 4 5 6 7 Rename sum up all the vertices d lt c a b c d e
  • Android NDK 构建,方法无法解析

    我有一个带有本机代码的 Android 项目 我可以通过调用从命令行构建本机代码ndk build命令没有错误或警告 但是当我在ADT中打开它时 它显示以下错误 错误信息 Method CallStaticIntMethod could n
  • 基于组件的游戏设计中的共享字段

    我认为这是使用 XNA 在 C 中完成基于组件的游戏引擎之前的最后一个逻辑飞跃 我定义了实体类和抽象组件 我的问题出现在我的 EntityFactory 中 当我想创建一个新实体时 我将 EntityType 枚举传递给工厂中的静态方法 然
  • mifare 卡身份验证错误“6982:安全状态未满足”

    我有 pc sc 读卡器和非接触式卡 mifare 卡 我可以连接到该卡 并且我也成功执行 getdate 命令 但是当我想进行身份验证时 我看到此错误 6982 安全状态不满足 我已经尝试过这 3 个不同的身份验证命令 但所有这些命令都出
  • 如何在 Rust 中删除字符串的第一个和最后一个字符?

    我想知道如何删除 Rust 中字符串的第一个和最后一个字符 Example Input Hello World Output ello Worl 您可以使用 chars 迭代器并忽略第一个和最后一个字符 fn rem first and l
  • 使用 Pyinstaller 将 Django 项目转换为 .exe - 缺少模块、ModuleNotFoundError

    我正在使用 Pyinstaller 将 Django 项目转换为 exe 文件 我希望能够只需单击一个图标并在浏览器中打开该项目 这是我的文件夹结构 proj pycache proj pycache init py manage py D
  • 是否应该将jqGrid的addJSONData用法替换为setGridParam()和trigger('reloadGrid')的用法?

    我最近写了一个问题的答案 jqGrid 在更新表 自定义更新时显示默认 正在加载 消息 https stackoverflow com questions 2614643 jqgrid display default loading mes
  • Android 导航栏覆盖

    对于我的应用程序 我必须在 Android 屏幕底部的导航栏顶部绘制一个位图 我很好奇 WindowManager LayoutParams TYPE SYSTEM OVERLAY 是否可以用于覆盖导航栏 Use the WindowMan
  • 如何避免动态图中的“堆指针意大利面条”?

    一般问题 假设您正在编写一个由图组成的系统 以及可以根据相邻节点的配置激活的图重写规则 也就是说 您有一个在运行时不可预测地增长 收缩的动态图 如果你天真地使用malloc 新节点将被分配在内存中的随机位置 经过足够的时间 你的堆将变成一个