С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Temirlan90
133 / 133 / 8
Регистрация: 30.09.2010
Сообщений: 333
#1

Закон Амдала - C++

08.05.2011, 12:12. Просмотров 2096. Ответов 2
Метки нет (Все метки)

Закон Амдала
(Время: 1 сек. Память: 16 Мб Сложность: 23%)

Параллельное программирование изучает методы построения программ, которые будут выполняться на нескольких процессорах. В результате решения одной из первых задач этого раздела информатики появился закон Амдала.

Задача Амдала формулировалась так. Имеется n процессоров и p процентов вычислений не могут выполняться параллельно. Во сколько раз быстрее можно выполнить вычисления по сравнению с одним процессором?

Например, если n = 10, p = 50, а на одном процессоре все вычисления выполняются за время t. Тогда первая половина вычислений (50%) будет выполнена за время t/(2•10) , а вторая - за время t/2. Общее время вычислений в этом случае составит t/2 + t/20 = 11•t/20, а ускорение по сравнению с одним процессором составит 20/11 раза.

Если же n = 10, p = 25, и на одном процессоре все вычисления выполняются за время t. Тогда 75% вычислений будут выполнены за время 3•t/(4•10) , а оставшиеся 25% - за время t/4 . Общее время вычислений в этом случае составит t/4 + 3•t/40 = 13•t/40, а ускорение по сравнению с одним процессором составит 40/13 раза.

Даны числа n и p. Напишите программу, решающую задачу Амдала.
Входные данные

Входной файл INPUT.TXT содержит 2 целых числа n и p. (1 <= n <= 1000, 0 <= p <= 100).
Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу с точностью, не меньшей 10-6.
Примеры
INPUT.TXT
10 50
OUTPUT.TXT
1.818181818

INPUT.TXT
10 25
OUTPUT.TXT
3.076923077

INPUT.TXT
1000 100
OUTPUT.TXT
1.000000000
Не могу понять как это высчитывается...помогите разобраться.

Добавлено через 36 минут
нашел формулу, но не подходит
C++
1
s = 1 / (p + (1 - p) / n);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2011, 12:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Закон Амдала (C++):

Закон Менделеева-Клайперона - C++
Программа для Закона Менделеева-Клайперона, определяющую один из параметров давление, занимаемый объем, температура, газа при изохорном,...

Показательный закон распределения - C++
Подскажите не пойму почему нестабильно работает рандом, т.е. вроде первые значений 20-15 нормально выдает, а потом проходит 1 и тоже чисто....

Закон распределения Парето (или 80\20) - C++
Проблема следующего характера: при построении таблицы в Excel нужно сосчитать итоговую сумму (т.е. сумму всех чисел, как факты), но в...

Ассоцыативный закон для квадратных матриц - C++
Даны две квадратные матрицы одного порядка А и В. Показать, что для них действут ассоциативный закон, т.е. А * В = В * А. в случае...

Генератор случайных чисел, закон распределения задан - C++
Генерация случайных чисел заданным законом распределения. Разработать алгоритм генерации случайных чисел заданным законом...

Закон отражения в ограниченой зоне на консольном приложении - C++
Честно скажу, с++ впервые увидел в январе, понимаю 7е очень много, но более менее, пишу программу нужно задать с терминала размер поля в...

2
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.05.2011, 12:50 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <iomanip>
main(){
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    double n,p;
    std::cin >> n >> p;
    if (p) std::cout << std::fixed << std::setprecision(9) << 100/(p+(100-p)/n);
          else std::cout << n;
    std::cin.get();
    return 0;
}
2
Temirlan90
133 / 133 / 8
Регистрация: 30.09.2010
Сообщений: 333
08.05.2011, 13:05  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main() {
    float p, n, s;
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    cin >> n >> p;
    s = 1 /((p/100) + ((100-p)/(100*n)));
    printf("%0.9f", s);
    system("pause >> void");
    return 0;
}
чуток не сходилось с ответом)

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main() {
    float p, n, s;
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    cin >> n >> p;
    s = 1 / ((p / 100) + ((100 - p) / (100 * n)));
    printf("%0.9f", s - 0.000000054);
    return 0;
}
решение прошло все тесты =)))))
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2011, 13:05
Привет! Вот еще темы с ответами:

Найти, чья сила притяжения больше (используя закон всемирного тяготения) - C++
Задача 2: Входные данные: Во входном файле содержатся два целых числа, разделенных пробелом – X  (0  &lt;  X  &lt;  384000) и Y (−100000 ...

задачи по темам: постоянный ток, закон Ома,несколько ЭДС в одной цепи, закон Джоуля-ленца - Электричество и магнетизм
ПОМОГИТЕ, ПОЖАЛУЙСТА, РЕШИТЬ ЗАДАЧИ ПО ФИЗИКЕ!!! Тема: Постоянный ток. Сопротивление проводника. №1. Из вертикально расположенного...

Закон сохранения момента импульса и закон сохранения энергии - Механика
Человек стоит на краю горизонтальной платформы, вращающейся по инерции вокруг неподвижной оси с угловой скоростью w. Необходимо найти...

1 Закон Кирхгофа - Электротехника
Посмотрите я правильно составил уравнение для 3 узла?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.