有效存储“坐标”的机制[重复]

问题描述 投票:2回答:1

这个问题在这里已有答案:

在为我的业余爱好项目工作时,我正在努力为以下问题找到最“有效”的解决方案。在我描述这个问题之前,我想说我不确定是否必须在https://math.stackexchange.com/部分或https://stackoverflow.com/部分发布此内容。所以,如果我在错误的部分,抱歉! ;)

问题描述:

我有一个包含元素的文件,这些元素可以用坐标表示。这些坐标由两个无符号整数组成,例如:0,2 6,31,157348。表示文件中元素的所有坐标对于给定文件都是唯一的。我想要实现的是为这些坐标创建一个映射,以便我可以快速访问它们。一个非常简单的解决方案是创建一个将坐标存储为一对的集合。例如:

$collection = [0 => [0,2],1 => [6,3], 2 => [1,157348], ...];

这个解决方案的问题是(我假设)文件可以包含的大量元素。在我的情况下,该文件很可能包含数十万个元素,留给我一个非常大的映射集合。这可能会导致应用程序出现内存问题,从而导致应用程序崩溃。

我认为将元素的坐标存储为配对数组是低效的。我认为一个更有效的内存解决方案是,如果我可以将元素的坐标编码为单个值,这个值又可以解码以获得真实的元素坐标。

解决方案是将坐标存储为字符串。例如:

$collection = [0 => '0;2', 1 => '6;3', 2 => '1;157348', ...];

这给我留下了一个单维数组,它应该比之前的多维解决方案更有效。哪个很棒。但是这个解决方案需要一些额外的步骤:

写作:

  1. 将整数编码为字符串并用标记分隔它们(;

读:

  1. 解码字符串,分隔字符串标记(;)。
  2. 将坐标值转换回整数。

如果可以避免这些步骤,那也许会很酷。并且我不认为将坐标存储为浮点数,因为(可能的)非常大的小数部分。

所以我在想,我无法想象成为第一个遇到这种问题的人,是否有一种方法(如:算法)能够将两个整数值转换为单个整数值,并且可以重新转换为原始值通过计算。

从我看到的方式来看,这将具有以下优势:

  • 无int - >字符串或字符串 - >需要转换为int。
  • 将值存储为整数比字符串存储更有效。

缺点是:

  • 将坐标计算为单个值并返回,将需要更多的CPU功率,从而减慢应用程序的速度。

我更倾向于使用较慢的解决方案来解决内存效率较低的解决方案,因为我希望(简单地说)内存效率低的解决方案会增加应用程序崩溃的风险,因为更多CPU密集型解决方案会增加系统处理文件的时间。

那么如果存在这样的算法,任何人都有线索吗?或者你对另一种解决这个问题的方法有所了解我会很高兴听到你的想法。

如果您认为我的假设不正确,请以建设性的方式纠正我;-)

php arrays algorithm memory
1个回答
0
投票

你需要在php中加载整个集合吗?如果不这样做,可以使用Redis(https://redis.io/)存储集合,只查询所需的值。如果您提供有关您使用这些值的更多详细信息,将会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.