Мне хочется решить 2 задачи:
Найти расстояние от конкретной точки (пусть точка A) до всех остальных точек в графе
Восстановить наилучший (с наименьшей длиной) от точки A до любой точки в графе
На мой взгляд тут подходит алгоритм Дейкстры. Однако мне нужно решать эти задачи на фронтенде и в веб приложении. JavaScript слишком медленный для этой задачи. Я слышал, что webassembly работает очень быстро, часто почти с такой же скоростью, как код (например на C/C++) с которого компилировали в wasm, что явно быстрее JavaScript.
Я самостоятельно написал программу для решения этих 2 задач на С (с учетом того факта, что это должно будет скомплироваться в wasm) (однако это не в явном виде Дейкстра, а скорее модификация алгоритма поиска в ширину для взвешенных графов, ну или можно сказать, что это Дейкстра с очередью, где вершина может туда попадать не один раз)
Прикрепляю на всякий случай
этот код
К сожалению, если его скомпилировать в wasm он работает довольно медленно, и даже медленнее, чем нативный JS. (Для 160+ вершин и 350+рёбер скорость больше 1ms) Возможно, с C кодом что-то не так. (Собирал в wasm через
этот сервис)
Но меня интересует вопрос, возможно ли быстрее реализацию написать на wasm? (Если есть готовые реализации, буду очень признателен, если расскажете про них) На какую скорость я могу рассчитывать?