gpt4 book ai didi

php - 如何使用 PHP 和 C 将大图保存在内存中?

转载 作者:行者123 更新时间:2023-11-30 15:11:56 25 4
gpt4 key购买 nike

我需要制作一个网络应用程序,除了其他东西之外,它还可以对大图(数据结构)进行查询。我将在图上运行 Dijkstra 或 A* 算法,并将最短路径作为服务器响应返回给用户(可能是 JSON 格式)。但是该图非常大,每次用户查询从A点到B点的最短路径时都构建它,效率不高。我需要找到一种将图形保存在内存中的方法。

所以,我正在考虑制作一个 C 程序,我将运行一次,它将构造图形,然后打开服务器套接字并开始监听某个端口。然后在 PHP 中,我将通过套接字连接到该程序,发送点 A 和 B 并等待响应。

但我不确定这个解决方案有多好......还有其他更好、更优雅的解决方案吗?我建议用 C 语言编写独立程序来构建图形并没有什么特别的原因,只是我用 C 语言编写它比用 PHP 语言更舒服,而且 C 语言比 PHP 更快(据我所知,今天可能不正确)。

最佳答案

I am thinking about making a C program, which I will run once, it will construct graph and then open server socket and start listening on some port.

这种做法完全有效,但增加了寻路程序的复杂度和系统部署的复杂度。

实际上,您可以使用 PHP 对其进行编程,并使用 serialize() 以序列化格式存储对象或任何中间结果。但如果您的对象非常大,这可能不会提高 CPU 效率。

除了使用监听应用程序或 PHP 代码之外,第三种方法可以是编译的 PHP 扩展(C/C++ 语言),这比 PHP 代码的 CPU 和内存效率更高。同时,您可以为您的系统在静态文件中构建自己的搜索树或索引。然而,这些对象仍然不是持久的。

最后,您可以随时使用 PHP 而不是 C 来构建监听服务,使用套接字方法 http://php.net/manual/en/sockets.examples.php 。它仍然可以持久化对象并且程序 session 不会结束。

您应该能够根据应用程序的性质(内存、CPU 和逻辑复杂性)做出自己的选择。

关于php - 如何使用 PHP 和 C 将大图保存在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35328276/

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