簡體   English   中英

如何減少排列時間?

[英]How to decrese permutation time?

我不太希望得到答案,但是我認為這更像是頭腦風暴,所以請給你最好的主意:)

因此,我想制作一個可以對所有ASCII字符進行排列的程序,並且我無法連接1000台計算機來計算此值,因為不幸的是我只有一台計算機,因此我需要某種算法來加快處理速度。

我制定了算法來查找可能的組合,但我在網上查找時,將需要100多年的時間。 請幫忙。

這是查找置換的代碼(它無法找到所有ASCII字符置換,但是具有一個包含所有字母和數字的字符串,他從該字符串中進行置換):

import java.io.*;

public class doIt extends AI {

    public void check() {
        String letters = "qwertzuioplkjhgfdsayxcvbnm0123456789-_";
        permute(letters);

    }

    public void permute(String letters) {

        int length = letters.length();
        boolean[] used = new boolean[length];
        StringBuffer str = new StringBuffer(length);

        permutation(str, letters, used, length, 0);
    }

    public void permutation(StringBuffer str, String letters, boolean[] used, int length, int position) {

        if (position == length) {
            try {
                File one = new File("G:/AllDateBases/Combinations.txt");
                PrintWriter pw = new PrintWriter(new FileWriter("G:/AllDateBases/Combinations.txt", true));
                pw.println(str.toString());
                pw.close();
            } catch (IOException e) {
                System.out.println("Error");
            }
            return;
        } else {
            for (int i = 0; i < length; i++) {

                if (used[i]) continue;

                str.append(letters.charAt(i));
                used[i] = true;

                permutation(str, letters, used, length, position + 1);

                str.deleteCharAt(str.length() - 1);
                used[i] = false;
            }
        }
    }
}

進行排列需要很長時間。 解決需要仔細研究所有可能解決方案的問題時,通常可以采用多種方法來減少許多排列,或者使用有趣的算法來更快地獲得解決方案。

這是一個這樣的問題示例: https : //projecteuler.net/problem=67嘗試所有組合都是不可能的(這將花費200億年的計算機時間)。 但是使用有趣的算法,問題可以在一秒鍾之內解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM