Мастабируемый многопоточный алгоритм поддержки кратчайших расстояний во взвешенном корневом графе
Студент: Наумов Дмитрий Кириллович
2022г.
Научный руководитель: Аксёнов В.Е
Учебная группа: M34351
Оглавление
- Однопоточный алгоритм
- Авторский алгоритм
- Решённые проблемы
- Корректность алгоритма
АктуальностьОбзорПервые идеи алгоритмаКодFuture work
Однопоточный алгоритм
Операции:
- getDistance(u)
- setEdge(u, v, w)
Типы операций модификации:
-
инкрементальный
- вес ребра увеличивается
- исток ребра - родитель вершины в дереве кратчайших расстояний
- декрементальный
Однопоточный алгоритм

Авторский алгоритм
-
Однопоточный алгоритм
-
Двухфазная блокировка
-
Помощь потоков
-
Координация потоков
Дедлок при тонкой блокировке

История значений


Проблема хранения расстояния

Проблема хранения расстояния

Проблема хранения расстояния

Линеаризуемость
1. fun getDistance(index: Int): Double? {
2. val vertex = vertexes[index] ?: return null
3. return vertex.getDistance().distance
4. }
5.
6. fun getDistance(): Distance {
7. while (true) {
8. val curDescriptor = descriptor.value
9. val curStatus = curDescriptor.process.status.value
10. val curDistance = readActual(curDescriptor, curStatus)
11. if (descriptor.value === curDescriptor) {
12. return curDistance
13. }
14. }
15. }
Линеаризуемость
fun setEdge(fromIndex: Int, toIndex: Int, newWeight: Double): Boolean {
if (fromIndex == toIndex) return false
val from = vertexes[fromIndex] ?: return false
val to = vertexes[toIndex] ?: return false
while (true) {
val process = Process(priority, newWeight)
process.from = from
process.to = to
process.help()
if (process.status.value == Status.SUCCESS) {
return true
}
}
}deck
By Dmitry Naumov
deck
- 146