小编Joh*_*ohn的帖子

Dijkstra的算法:内存消耗

我根据本网站上的代码实现了Dijkstra的算法.基本上,我有许多节点(比如10000),每个节点可以有1到3个连接到其他节点.

节点在3d空间内随机生成.连接也是随机生成的,但它总是首先尝试找到与其最近邻居的连接,然后慢慢增加搜索半径.每个连接的距离为1.(我怀疑这一点很重要,但这只是背景).

在这种情况下,该算法仅用于查找从起始点到所有其他节点的最短跳数.它适用于10,000个节点.我遇到的问题是,随着节点数量的增加,比如200万,我在尝试构建图形时会耗尽所有计算机内存.

有没有人知道实现算法以减少内存占用的另一种方法,还是有另一种算法使用更少的内存?

c++ memory algorithm memory-management dijkstra

7
推荐指数
1
解决办法
2794
查看次数

Python vs perl排序性能

这解决了我的Perl代码的所有问题(加上额外的实现代码...... :-))在Perl和Python中同样令人敬畏.

use WWW::Curl::Easy;
Run Code Online (Sandbox Code Playgroud)

感谢所有回复的人,非常感谢.

编辑

看来我正在使用的Perl代码花费大部分时间来执行http get,例如:

my $start_time = gettimeofday;
$request = HTTP::Request->new('GET', 'http://localhost:8080/data.json');
$response = $ua->request($request);
$page = $response->content;
my $end_time = gettimeofday;
print "Time taken @{[ $end_time - $start_time ]} seconds.\n";
Run Code Online (Sandbox Code Playgroud)

结果是:

Time taken 74.2324419021606 seconds.
Run Code Online (Sandbox Code Playgroud)

我的python代码比较:

start = time.time()
r = requests.get('http://localhost:8080/data.json', timeout=120, stream=False)

maxsize = 100000000
content = ''
for chunk in r.iter_content(2048):
    content += chunk
    if len(content) > maxsize:
        r.close()
        raise ValueError('Response too large')

end = time.time()
timetaken = end-start
print timetaken …
Run Code Online (Sandbox Code Playgroud)

python sorting perl performance

5
推荐指数
2
解决办法
574
查看次数

使用互斥锁同时从多个线程访问矢量

我正在使用Tokio库提供的示例,并尝试使用所有当前活动的TCP连接的向量.最后,我希望能够通过循环遍历它们并向套接字写入消息来向每个活动连接广播消息.

首先,我试图在一个线程中打印出当前连接数,同时接受另一个线程中的连接.

为此,我正在尝试使用共享向量.当它们断开连接时,我还没有实现从向量中删除连接.

// A tiny async echo server with tokio-core
extern crate futures;
extern crate tokio_core;
extern crate tokio_io;

use futures::{Future, Stream};
use tokio_io::{io, AsyncRead};
use tokio_core::net::TcpListener;
use tokio_core::reactor::Core;
use std::thread;
use std::sync::{Arc, Mutex};
use std::io::stdout;
use std::io::Write;

fn main() {
    // Create the event loop that will drive this server
    let mut core = Core::new().unwrap();
    let handle = core.handle();

    // Bind the server's socket
    let addr = "127.0.0.1:12345".parse().unwrap();
    let tcp = TcpListener::bind(&addr, &handle).unwrap();

    let mut connections = Arc::new((Mutex::new(Vec::new()))); …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
2061
查看次数