UNITY - это язык программирования, созданный К. Мани Чанди и Джаядевом Мисра для их книги « Проектирование параллельных программ: основа» . Это теоретический язык, который фокусируется на том , что , а не где , когда и как . В языке нет методов управления потоком , и операторы программы выполняются недетерминированным образом до тех пор, пока операторы не перестанут вызывать изменения во время выполнения. Это позволяет программам работать неограниченно долго, например, системам автопилота или систем безопасности электростанций, а также программам, которые обычно завершаются (которые здесь сходятся к фиксированной точке).
Описание
Все операторы являются присваиваниями и разделяются знаком #
. Оператор может состоять из нескольких присвоений формы a,b,c := x,y,z
или a := x || b := y || c := z
. Вы также можете иметь количественный список инструкций , где х и у выбираются случайным образом из значений , которые удовлетворяют выражение . Количественно назначение аналогично. В , оператор выполняется одновременно для всех пар и которые удовлетворяют выражению .<# x,y : expression :: statement>
<|| x,y : expression :: statement >
x
y
Примеры
Пузырьковая сортировка
Пузырьковая сортировка массива путем сравнения соседних чисел и замены их местами, если они находятся в неправильном порядке. С использованием ожидаемое время, процессоры и ожидаемая работа. Причина, по которой у вас есть только ожидаемое время, которое k
всегда выбирается случайным образом из. Это можно исправить, перевернув k
вручную.
Программа bubbleortобъявлять n: целое число, A: массив [0..n-1] целых чиселпервоначально n = 20 # <|| i: 0 <= i и iназначать <# k: 0 <= k <2 :: <|| i: i% 2 = k и 0 <= i A [i], A [i + 1]: = A [i + 1], A [i] если A [i]> A [i + 1]>>конец
Ранг-сортировка
Вы можете отсортировать время с рангом-сортировкой. Тебе нужно процессоры, и делаем Работа.
Рейтинг программыобъявлять n: целое число, A, R: массив [0..n-1] целых чиселпервоначально n = 15 # <|| я: 0 <= я <п :: A [i], R [i] = rand ()% 100, i>назначать <|| я: 0 <= я <п :: R [i]: = <+ j: 0 <= j> # <|| я: 0 <= я <п :: A [R [i]]: = A [i]>конец
Алгоритм Флойда – Уоршолла
Используя алгоритм Флойда-Уоршалла, алгоритм кратчайшего пути всех пар , мы включаем промежуточные узлы итеративно и получаем время, используя процессоры и Работа.
Программа кратчайший путьобъявлять n, k: целое число, D: массив [0..n-1, 0..n-1] целых чиселпервоначально n = 10 # к = 0 # <|| i, j: 0 <= iD [i, j] = rand ()% 100>назначать <|| i, j: 0 <= i D [i, j]: = min (D [i, j], D [i, k] + D [k, j])> || k: = k + 1, если k конец
Мы можем сделать это еще быстрее. Следующие программы вычисляют кратчайший путь для всех пар в время, используя процессоры и Работа.
Программа shorttestpath2объявлять n: целое число, D: массив [0..n-1, 0..n-1] целых чиселпервоначально n = 10 # <|| i, j: 0 <= iD [i, j] = rand ()% 10>назначать <|| i, j: 0 <= i D [i, j]: = min (D [i, j], )> конец
После раунда , D[i,j]
содержит длину кратчайшего пути из к длины . В следующем раунде длины, и так далее.
Рекомендации
- К. Мани Чанди и Джаядев Мишра (1988) Дизайн параллельной программы: Фонд .