次のアルゴリズムの時間計算量を計算するときの説明は正しいですか?
HashSet である moduleMarksheetFiles は、指定された moduleName を含むファイルを追加するために使用されています。
for (File file: marksheetFiles){ while(csvReader.readRecord()){ String moduleName = csvReader.get(ModuleName); if (moduleName.equals(module)){ moduleMarksheetFiles.add(file); } } }
m をファイル数とする
- k をファイルあたりの平均レコード数とします。
- HashSet では重複が許可されないため、各ファイルは 1 回だけ追加されます。HashSet.add() は平均で O(1)、最悪の場合は O(n) です。
- 指定された moduleName を持つレコードを検索するには、ファイル内のすべてのレコードを moduleName と比較する必要があり、O(n) ステップかかります。
したがって、平均時間計算量は O((m*k)^2) になります。
これは正しいです?
また、最悪のケースをどのように計算しますか?
ありがとう。
PS。宿題ではなく、システムのアルゴリズムを分析してパフォーマンスを評価するだけです。