Je dispose d'un tableau de idsTrie un tableau selon les éléments d'un autre tableau
a1 = [1, 2, 3, 4, 5]
et j'ai un autre tableau d'objets avec ids dans un ordre aléatoire
a2 = [(obj_with_id_5), (obj_with_id_2), (obj_with_id_1), (obj_with_id_3), (obj_with_id_4)]
Maintenant, je dois trier a2 selon l'ordre des ids en a1. devrait devenir maintenant si a2:
[(obj_with_id_1), (id_2), (id_3), (id_4), (id_5)]
a1 peut-être [3, 2, 5, 4, 1] ou dans un ordre quelconque mais a2 doit correspondre à l'ordre de ids dans a1.
Je aime ceci:
a1.each_with_index do |id, idx|
found_idx = a1.find_index { |c| c.id == id }
replace_elem = a2[found_idx]
a2[found_idx] = a2[idx]
a2[idx] = replace_elem
end
Mais cela pourrait encore fonctionner dans un temps O (n^2) si l'ordre des éléments de a2 est inverse exactement de a1. Quelqu'un peut-il me dire s'il vous plaît la façon la plus efficace de trier A2?
Je crois que ce serait O (n^2). le tri réel est O (n), mais l'étape de préparation le ferait n^2 – Jato
Je ne suis pas d'accord, pour construire une table de hachage, il faut O (n), regardez ici http://en.wikipedia.org/wiki/ Hash_table – megas
Oui, la construction de la table de hachage est O (n) temps. Et le tri est O (n) temps. Donc vous avez 2xO (n) ... hmmm ... ce serait moins que n^2. Je me suis trompé. bonne prise! – Jato