试图为我的程序找出Big 0符号

时间:2015-04-12 11:29:35

标签: java performance algorithm notation

您好我正在尝试为我的代码找出大0表示法但是遇到了麻烦。我是算法的新手,不知道什么过程增加0(n)到0(n 2 )。

package gmit;

import java.util.*;
import java.io.*;
import java.nio.charset.Charset;

public class TestRunner {
    // Creating Hashmap
    private static HashMap<String, String> stringmap = new HashMap<String, String>();

    // Creating String Array lists
    private static ArrayList<ArrayList<String>> mylist = new ArrayList<ArrayList<String>>();
    private static ArrayList<String> lol = new ArrayList<String>();

    // Declaring int variables
    private static int encryptioncounter=0,decryptioncounter=0,lastindexcounter=0,
            mylistindexcounter=0,resortcounter=0;
    // Declaring String variables
    private static String password,value;
    private static String result,text;


    // ----------------------------------------------- Main start --------------------------------------------------------
    public static void main(String[] args) throws IOException {



        System.out.println("Pleaseinput your passphrase");
        // Gets user Input
        Scanner in = new Scanner(System.in);
        password = in.nextLine();

        System.out.println("Please input the file name you want to encrypt.(WarAndPeace-LeoTolstoy.txt)");
        // Gets user Input
        Scanner tin = new Scanner(System.in);
         text = tin.nextLine();

        //Starts Timer
         long startTime = System.nanoTime();

        // Method to populate HashMap
         putstuffinstrinmap();

        // Starts for loop
        // Creates Array list in number of the amount of characters of the password
        // Adds created arraylists to Arraylist<List> mylist.

        for (int i = 0; i < password.length(); i++) {
            List<String> firstCharandMore= new ArrayList<>();
            char c = password.charAt(i);
            firstCharandMore.add(String.valueOf(c));
            String resortcountertostring= String.valueOf(resortcounter);
                mylist.add((ArrayList<String>) firstCharandMore);
                // Adds index for resort to arraylists
                mylist.get(i).add(resortcountertostring);
                //mylist.add((ArrayList<String>) resortcountertostring);
                resortcounter++;
            }

        // Reads in File in UTF-8 format
        // gets back a character
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(
                    new FileInputStream(text),
                    Charset.forName("UTF-8")));
            int c;
            while((c = reader.read()) != -1) {
              char string = (char) c;

              // Converts Character to upper case String
              // Passes the string into encryption method
              encrypt(Character.toString(string).toUpperCase());
              // Adds one to counter
              decryptioncounter++;

            }
            //long endTime2   = System.nanoTime();
            //long totalTime2 = endTime2 - startTime;
            //double seconds2 = (double)totalTime2 / 1000000000.0;
            //System.out.println(seconds2+" Encryption");
            // Creates new Arraylist listToSort (Copy of mylist)
            // Sorts Array lists in alphabetic order by first character from each list
            sortarraylists();

            writetofileencrypted();
            // Resorts arraylists using the index
            resortarraylist();

            // Calls decryption method
            decrypt();
            // Calls write to file method
            writetofilefin();
            // Ends Timer
            long endTime   = System.nanoTime();
            long totalTime = endTime - startTime;
            // Prints Time
            double seconds = (double)totalTime / 1000000000.0;
            System.out.println(seconds+" Total time");       
    }
    // ------------------------------------ End Main -----------------------------------------

    // Writes encrypted message to file.
    private static void writetofileencrypted() throws FileNotFoundException, UnsupportedEncodingException {
        // TODO Auto-generated method stub
        PrintWriter writer2 = new PrintWriter("encrypted.txt", "UTF-8");
        StringBuilder builder2 = new StringBuilder();
        for (ArrayList<String> value : mylist) {
            builder2.append(value);
        }
        String s = builder2.toString();
        //String s = lol.toString();
        writer2.println(s);
        writer2.close();
    }

    // -------------------------------------resorting-----------------------------------------
    private static void resortarraylist() {
        // Resorts lists using index 1 (The numbers assigned to that index))
        mylist.sort((l1, l2) -> l1.get(1).compareTo(l2.get(1)));
    }
    // ------------------------------------End resorting --------------------------------------



    // ------------------------------------ Sorting ------------------------------------------
    private static void sortarraylists() {
        // Sorting lists in alphabetical order by index 0
        mylist.sort((l1, l2) -> l1.get(0).compareTo(l2.get(0)));
    }
    // ------------------------------------End sorting ---------------------------------------

    // ------------------------------------write to file --------------------------------------
    private static void writetofilefin() throws FileNotFoundException, UnsupportedEncodingException {
        // Prints to array list lol to file
        PrintWriter writer = new PrintWriter("finished.txt", "UTF-8");
        StringBuilder builder = new StringBuilder();
        for (String value : lol) {
            builder.append(value);
        }
        String s = builder.toString();
        //String s = lol.toString();
        writer.println(s);
        writer.close();

    }


    // -------------------------------- Encryption Start -------------------------------------
    private static void encrypt(String string) {

        // Gets coherent value from map 
        value= stringmap.get(string);
        // adds value to mylist at index encryptioncounter 
        mylist.get(encryptioncounter).add(value);
        // Adds one to counter
        encryptioncounter++;
        // Resets encryptioncounter 
        if(encryptioncounter>=password.length()){
            encryptioncounter=0;
            // Adds one to lastindexcounter
            lastindexcounter++;
        }       
    }
    // --------------------------------- Encryption End ---------------------------------------

    // --------------------------------- Decryption Start -------------------------------------
    private static void decrypt() {

        int thiscounter=0;
        // runs until decryptioncounter is = to thiscounter or 
        // mylistindexcounter is = to lastindexcounter
        while(decryptioncounter   != thiscounter  ){
            for(int i=0;i <password.length() ;i++){
                // gets value from Arraylist 
                String ba = mylist.get(i).get(mylistindexcounter);//0(1)
                // gets coherent value from map 
                result= stringmap.get(ba);// 0(n)
                // adds value to arraylist lol
                lol.add(result);
                thiscounter++;
                if(mylistindexcounter >=lastindexcounter){
                    decryptioncounter =thiscounter;
                }
            }
            mylistindexcounter++;
        }       
    }
    // ---------------------------------- Decryption End ---------------------------------------

    // --------------------------------- Map population start ---------------------------------
    // 0(1)
    public static void putstuffinstrinmap(){
        stringmap.put("AA", "P");//AA - P
        stringmap.put("AD", "H");//AD - H
        stringmap.put("AF", "0");//
        stringmap.put("AG", "Q");//
        stringmap.put("AV", "G");//
        stringmap.put("AX", "6");//
        stringmap.put("DA", "4");//
        stringmap.put("DD", "M");//
        stringmap.put("DF", "E");//
        stringmap.put("DG", "A");//
        stringmap.put("DV", "1");//
        stringmap.put("DX", "Y");//
        stringmap.put("FA", "L");//
        stringmap.put("FD", "2");//
        stringmap.put("FF", "N");//
        stringmap.put("FG", "O");//
        stringmap.put("FV", "F");//
        stringmap.put("FX", "D");//
        stringmap.put("GA", "X");//
        stringmap.put("GD", "K");//
        stringmap.put("GF", "R");//
        stringmap.put("GG", "3");//
        stringmap.put("GV", "C");//
        stringmap.put("GX", "V");//
        stringmap.put("VA", "S");//
        stringmap.put("VD", "5");//
        stringmap.put("VF", "Z");//
        stringmap.put("VG", "W");//
        stringmap.put("VV", "7");//
        stringmap.put("VX", "B");//
        stringmap.put("XA", "J");//
        stringmap.put("XD", "9");//
        stringmap.put("XF", "U");//
        stringmap.put("XG", "T");//
        stringmap.put("XV", "I");//
        stringmap.put("XX", "8");//     
        stringmap.put("P", "AA");//
        stringmap.put("H", "AD");//
        stringmap.put("0", "AF");//
        stringmap.put("Q", "AG");//
        stringmap.put("G", "AV");//
        stringmap.put("6", "AX");//
        stringmap.put("4", "DA");//
        stringmap.put("M", "DD");//
        stringmap.put("E", "DF");//
        stringmap.put("A", "DG");//
        stringmap.put("1", "DV");//
        stringmap.put("Y", "DX");//
        stringmap.put("L", "FA");//
        stringmap.put("2", "FD");//
        stringmap.put("N", "FF");//
        stringmap.put("O", "FG");//
        stringmap.put("F", "FV");//
        stringmap.put("D", "FX");//
        stringmap.put("X", "GA");//
        stringmap.put("K", "GD");//
        stringmap.put("R", "GF");//
        stringmap.put("3", "GG");//
        stringmap.put("C", "GV");//
        stringmap.put("V", "GX");//
        stringmap.put("S", "VA");//
        stringmap.put("5", "VD");//
        stringmap.put("Z", "VF");//
        stringmap.put("W", "VG");//
        stringmap.put("7", "VV");//
        stringmap.put("B", "VX");//
        stringmap.put("J", "XA");//
        stringmap.put("9", "XD");//
        stringmap.put("U", "XF");//
        stringmap.put("T", "XG");//
        stringmap.put("I", "XV");//
        stringmap.put("8", "XX");// 
        stringmap.put("AH", ".");//
        stringmap.put("DH", "!");//
        stringmap.put("FH", "?");//
        stringmap.put("GH", " ");//
        stringmap.put("VH", "'");//
        stringmap.put("XH", ",");//
        stringmap.put(".", "AH");//
        stringmap.put("!", "DH");//
        stringmap.put("?", "FH");//
        stringmap.put(" ", "GH");//
        stringmap.put("'", "VH");//
        stringmap.put(",", "XH");//     
        stringmap.put("AP", "]");//
        stringmap.put("DP", "[");//
        stringmap.put("FP", "~");//
        stringmap.put("GP", "&");//
        stringmap.put("VP", ":");//
        stringmap.put("XP", ";");//
        stringmap.put("AP", "-");//"
        stringmap.put("DP", "");//
        stringmap.put("FP", "*");//
        stringmap.put("GP", "^");//
        stringmap.put("VP", "\"");//
        stringmap.put(null, " ");//
    }
    // --------------------------------- Map population End -----------------------------------

}

使用我的代码解释它或指导我阅读一些阅读材料的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,您不需要Total time来查找Big O. Big O表示法用于查找算法中的基本操作计数。就像写n一样,数组的元素是O(n),因为你需要编写每个元素。对于大小为n*n的矩阵,它是O(n ^ 2)。我想,所以我的算法Big O是O(n m + k)。其中n是步数while(decryption counter!= thecounter)循环次数,m是密码长度,k是其他操作,循环。通常k不会添加到Big O,因为它比n m小得多,但在你的情况下我不确定它。