J'ai un dictionnaire de dictionnaire. Les clés sont les noeuds dans un graphique. Par exemple, supposons que le nœud i du graphique est représenté par une clé i dans le dictionnaire. La valeur correspondant à cette clé est à nouveau un dictionnaire où les clés sont les voisins du nœud i dans le graphique. Ces clés ont une valeur par défaut 1. Considérons les exemple- suivantsComment supprimer toutes les occurrences d'un élément d'un dictionnaire de dictionnaire?
Les nœuds du graphe sont - [1,2,3,4,5,6]
voisins:
1->[2,4,5,6]
2->[3]
3->[4,6]
4->[1,6]
5->[1]
6->[1,3,4]
Ainsi, le dictionnaire du dictionnaire ressemble à ceci:
{1:{2:1,4:1,5:1,6:1},2:{3:1},3:{4:1,6:1},4:{1:1,6:1},5:{1:1},6:{1:1,3:1,4:1}}
maintenant, à différentes étapes de l'algorithme que je suis en train de mettre en œuvre, je dois supprimer toutes les occurrences d'un nœud x dans la liste voisine d'un autre noeud s. Si x = 4, puis après la suppression, le dictionnaire du dictionnaire devrait ressembler à ceci:
{1:{2:1,5:1,6:1},2:{3:1},3:{6:1},4:{1:1,6:1},5:{1:5},6:{1:1,3:1}}
J'utilise un dictionnaire de dictionnaire au lieu d'un dictionnaire de listes afin de rendre la suppression efficace. Mais c'est toujours cher.
Quel est le plus efficace de faire cela?
J'ai gardé une structure de données de voisins_of une fois, mais je n'ai pas pensé à utiliser des ensembles! Merci. J'avais décidé de changer d'approche parce que je pensais qu'il y aurait trop à faire dans la phase de pré-traitement pour créer la nieghbones de la structure de données et cela pourrait être coûteux si la taille du graphique était énorme. –
Je crains que vous ayez un compromis entre la mémoire et le nombre de cycles du processeur. Si vous voulez économiser de la mémoire, vous ne stockez les connexions qu'une seule fois. Si vous voulez faire vite, vous les stockez deux fois. La création de la table inverse est après tout une opération rapide avec très peu de lignes de code. (Je suppose que si vous avez des dizaines de millions de connexions, vous ne pouvez plus vivre avec des algorithmes O (n) plus tard, car ils ont tendance à devenir O (n^2) lorsque vous prenez en compte tout le traitement.) – DrV
Logique. –