gpt4 book ai didi

java - 如何让这个java程序在多核上运行?

转载 作者:行者123 更新时间:2023-12-02 03:14:24 24 4
gpt4 key购买 nike

这个程序是根据给定的字符序列和给定的集合生成所有可能的字符串,但它需要很多时间,如何减少内存使用并加速这个程序在多任务中工作而不生成相同的字符串两次? p>

public class LapTest {

static int q=0;

public static void main(String[] args) {
System.out.println("First Test");
char set1[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
int k = 4;
printAllKLength(set1, k);

//Do some logic
}

// The method that prints all possible strings of length k. It is
// mainly a wrapper over recursive function printAllKLengthRec()
static void printAllKLength(char set[], int k) {
int n = set.length;
printAllKLengthRec(set, "", n, k);
}

// The main recursive method to print all possible strings of length k
static void printAllKLengthRec(char set[], String prefix, int n, int k) {

// Base case: k is 0, print prefix
if (k == 0) { q++;
System.out.println(prefix);

if (prefix.equals("hkka")) {
System.exit(0);
}
return;
}

// One by one add all characters from set and recursively
// call for k equals to k-1
for (int i = 0; i < n; ++i) {

// Next character of input added
String newPrefix = prefix + set[i];

// k is decreased, because we have added a new character
printAllKLengthRec(set, newPrefix, n, k - 1);
}
}
}

最佳答案

您的程序很可能I/O 限制,这意味着将输出写入屏幕将比计算字符串花费更多时间。所以并行处理对你没有任何帮助。无论您稍后对字符串做什么,在现代计算机上,接收器(字符串的使用者)很可能比计算它慢,即使解决方案不完美。

另外,为了将字符串写入屏幕,请使用缓冲写入器,这将使您的程序更快。在您的类中定义 BufferedOutputStream:

static BufferedOutputStream out = new BufferedOutputStream(System.out, 81920); 

然后使用 out.write((prefix+"\n").getBytes()); 进行写入,并且不要忘记使用 out.flush();< 刷新流 位于程序末尾和 System.exit(0); 上。这将为您带来显着的性能提升。

也尽量不要在没有递归的情况下解决问题,这可能会给你另一个速度泵。

关于java - 如何让这个java程序在多核上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40535722/

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