【发布时间】:2015-02-02 15:56:37
【问题描述】:
背景
我正在研究自己的框架,以数值求解单纯复形上的偏微分方程。单纯形(N 维三角形)存储为有序的点集。点由它们在包含其坐标的单独数组中的索引表示。这些单纯形中的每一个都有一小部分与它们相关的信息(比如它们的体积)。我想实现一个数据结构,使我能够有效地对键对执行二进制操作以创建新键,并对值对以创建新值。然后这些新的键值对填充数据结构的新实例。
示例
我有以下坐标列表指定的三个点:
points = [(0, 0), (1, 0), (0, 1)]
这些坐标可以用来制作
- 一个 2-单纯形(三角形):(0, 1, 2)
- 三个 1-单纯形(行):(0, 1), (1, 2), (0, 2)
- 三个 0-单纯形(点):(0,), (1,), (2,)
问题
- 我想实现一个关联数组,最多包含大约 10^9 个键值对。
- 我需要通过对这些结构的现有实例的键和值执行二元运算来有效地创建此类结构的新实例。
- 键都是从 0 到 N 的正整数序列。它们始终按升序排列。
- 我怀疑这对于 N 在初始化时已知并保持静态的情况最容易实现,这对于大多数实际目的来说应该足够了。 N 大约是 10^7。
部分解决方案
我怀疑对我而言最好的解决方案是一种 trie,其键表示为一系列整数而不是一系列字符。
经过大量工作尝试在 Python 中尝试不同的想法(我通常使用的代码),我强烈怀疑 Clojure 会提供一种更直接的方法。因此,我为什么要问如何在 Clojure 中做到这一点。
【问题讨论】:
-
嗨,费曼!为什么你怀疑 Clojure 更合适?您在尝试用 python 实现这个想法时发现了哪些缺点?
-
本身并不是缺点,我只是探索了很多从未完全实现的方法。它们都非常实用且非常递归,所以我开始认为 Clojure 可能会提供一个更有启发性的框架。我并不是说 Python 不够,我只是怀疑解决我的特定问题的最佳方法可能会在 Clojure 的框架中变得更加明显
-
索引是密集的还是稀疏的?
-
索引密集,取0-N的每一个值。
标签: data-structures hash clojure