Академический Документы
Профессиональный Документы
Культура Документы
Год: 2021
Описание:
1 - Список экспериментов
2 - Форма создания эксперимента
3 - Описание результата эксперимента. Данная форма разбита на 2 вкладки
для разделения по специфике разных опытов.
import 'dart:math';
class Experiment2{
static double calculate({required List<String> alphabet, required int numExperiments, required int numVDI,
required List<int>timeForEveryVDI}){
List<double> variations = generateVariations(alphabet: alphabet, numExperiments: numExperiments,
numVDI: numVDI);
double result = 0;
for(double x in variations){
result+=x*logBase(x, 2);
}
double averageTime = getAverageTime(variations, timeForEveryVDI);
return -result/averageTime;
}
static double logBase(num x, num base) => log(x) / log(base);
static double getAverageTime(List<double> variations, List<int> timeForEveryVDI) {
double result = 0;
for(int i = 0 ; i < timeForEveryVDI.length; i++) {
result += variations[i]*timeForEveryVDI[i]/1000;
}
return result;
}
static List<double> generateVariations({required List<String> alphabet,required int numVDI, required int
numExperiments}){
///заполнение массива будующих случайных ведичин каждого символа алфавита нулями
List<double> numbers = [for(int i = 0; i < numVDI; i++) 0];
Random random = Random();
/// вызываем случайные символы из алфавита, суммируем его случайную величину на 1
for(int i = 0; i < numExperiments; i++){
numbers[random.nextInt(numbers.length)] += 1;
}
/// представим получившиеся случайные величины в диапазоне [0,1]
for(int i = 0; i < numbers.length; i++){
numbers[i] = (numbers[i] /numExperiments)/alphabet.length;
}
return numbers;
}
}
import 'dart:math';
class Experiment3 {
static double calculate({required List<String> alphabet, required int numExperiments, required int numVDI,
required List<int>timeForEveryVDI}) {
Map variations = generateVariations(alphabet: alphabet, numExperiments: numExperiments, numVDI:
numVDI);
double result = 0;
variations.forEach((key, value) {
result += value*logBase(value, 2);
});
double averageTime = timeForEveryVDI.reduce(max)/1000;//getAverageTime(timeForEveryVDI);
return -result/averageTime;
}
static double logBase(num x, num base) => log(x) / log(base);
static double getAverageTime(List<int> timeForEveryVDI) {
double result = 0;
for(int time in timeForEveryVDI) {
result += time;
}
return result/1000/timeForEveryVDI.length;
}
static Map generateVariations({required List<String> alphabet, required int numExperiments, required int
numVDI}) {
List<String> values = [];
/// рекурсивный метод, производящий перевод из 10 системы счисления в base систему счисления,
возвращение не числа, а получащейся комбинации алфавита
static String divisionByBase(int num, int base, List<String> alphabet) {
int numResult = num ~/ base;
int numRemainder = num % base;
return (num < base ? "" : divisionByBase(numResult, base, alphabet)) + alphabet[numRemainder];
}