gpt4 book ai didi

java - 将特定长度的字符串的所有排列和组合写入文件中的最佳性能

转载 作者:行者123 更新时间:2023-12-01 21:15:58 25 4
gpt4 key购买 nike

我有以下代码来将所有排列和组合写入文件中,但写入文件需要花费大量时间...请建议具有良好性能的更好代码。当我输入 abcdefghijklmnopqrstuvwxyzn=5 时,执行大约需要 5 分钟。

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.text.Collator;
import java.util.Arrays;

import java.util.Locale;
import java.util.Scanner;

public class permutation {

static int c;
static Scanner s=new Scanner(System.in);
static String input =s.nextLine();

int size = s.nextInt();
boolean[] num = new boolean[input.length()];

public void generate(String data) throws Exception {
FileWriter fstream = new FileWriter("D:\\out.txt",true);
BufferedWriter out = new BufferedWriter(fstream);
if (data.length() == size) {
out.newLine();
out.write(data);
System.out.println(data);
c++;
out.close();
return;
}
for (int i = 0; i < input.length(); ++i) {
if (!num[i]) {
num[i] = true;
generate(data + input.charAt(i));
num[i] = false;
}

}
}


public static void main(String[] args) throws Exception {
long startTime = System.currentTimeMillis();
permutation obj = new permutation();
Collator col = Collator.getInstance(new Locale("en", "EN"));
String s = input;
String[] s1= s.split("");
Arrays.sort(s1, col);
String sorted = "";
for (int i = 0; i < s1.length; i++) {
sorted += s1[i];
}
input=sorted;
System.out.println(input);
obj.generate("");
System.out.println();


long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println(totalTime);

}
}

最佳答案

如果您想让代码更快,请不要重复打开和关闭文件。在运行开始时打开一次,在运行结束时关闭一次。

打开文件至少涉及执行系统调用,可能还涉及数千条机器指令。如果将创建和处置缓冲区的“对象搅动”成本计算在内,则 BufferedWriter 的创建要多出几千美元。如果您希望程序以合理的速度运行,这些开销应该只发生一次……而不是多次……。

关于java - 将特定长度的字符串的所有排列和组合写入文件中的最佳性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40080511/

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