Вы используете неправильную структуру данных для хранения своих краев, и ваш вопрос не означает, что вы не можете выбрать другую структуру данных.Как уже говорили другие авторы: списки являются неизменяемыми, поэтому повторное удаление элементов глубоко внутри них является относительно дорогостоящей (O (n)) операцией.
Я также не понимаю, почему вы должны повторно вставить новое ребро в позицию 2Граф определяется как G = (V, E), где V и E задают вершин и ребер.Их порядок для них не имеет значения.Это определение графиков также уже говорит вам о лучшей структуре данных для ваших ребер: наборы.
В ocaml наборы представлены сбалансированными двоичными деревьями, поэтому средняя сложность вставки и удаления элементов равна O (log n).Итак, вы видите, что для удаления членов эта сложность определенно лучше, чем для одного из списков (O (n)), с другой стороны, добавление членов в набор обходится дороже, чем добавление элементов в список с использованием аргументовоперация.
Альтернативной структурой данных может быть хеш-таблица, в которую вставка и удаление могут быть выполнены за O (1) раз.Пусть ключи в хеш-таблице будут вашими ребрами, а поскольку вы не используете значения, просто используйте константу, например, единицу или 0.