Приведенный ниже код служит для счетчика слов , который, учитывая текстовый файл, печатает количество (суммарных и дискретных) слов и перечисляет k наиболее часто используемых слов в порядке убывания на основеуровень использования.
Учитывая это, моя цель состоит в том, чтобы вычислить сложность времени наихудшего случая этого решения как функцию параметров: c ( общее количество символов), m ( общее количество слов ), n ( общее количество дискретных слов ), k ( количество напечатанных слов ).
Пока что мне удалось выяснить только это, поскольку я использую Insertion Sort для сортировки arrayList, содержащего количество использованийдля каждого отдельного слова требуется O (n ^ 2) для этой части и O (k) для печати результатов, но я не могу точно сказать, дали ли эти результаты мои результатыправильно, или как действовать с параметрами c и m .Есть подсказки?
public static void main(int k)throws IOException{
//Create input stream & scanner
FileInputStream fin = new FileInputStream("readwords.txt");
Scanner fileInput = new Scanner(fin);
//Create the ArrayLists
ArrayList<String> words = new ArrayList<String>();
ArrayList<Integer> totalCount = new ArrayList<Integer>();
ArrayList<Integer> discreteCount = new ArrayList<Integer>();
//Read through file and find the words
while(fileInput.hasNext()){
//Get the next word
String nextWord = fileInput.next();
//Determine if the word is in the ArrayList
if(words.contains(nextWord)){
int index = words.indexOf(nextWord);
discreteCount.set(index, discreteCount.get(index) + 1);
totalCount.add(1);
}
else {
words.add(nextWord);
discreteCount.add(1);
totalCount.add(1);
}
}
//Close
fileInput.close();
fin.close();
//Sort ArrayLists
InsertionSort.sort(discreteCount, words);
//Print out the results
System.out.println("This file contains " +totalCount.size()+" words, There are " +discreteCount.size()+ " discrete words.");
int i = 1;
while(i <=discreteCount.size() && i <= k){
System.out.println(discreteCount.get(discreteCount.size()-i) +" "+words.get(discreteCount.size()-i));
i ++;
}
}