Existe-t-il une méthode pour multiplier des masortingces ayant une complexité de O (n)?

Je veux multiplier deux masortingces mais la sortingple boucle a une complexité de O (n 3 ). Existe-t-il un algorithme en programmation dynamic pour multiplier deux masortingces de complexité O (n)?

ok bien on ne peut pas mieux que O (n 2.81 )

edit: mais existe-t-il une solution qui puisse même se rapprocher du résultat jusqu’à un non spécifique? de colonnes et de rangées de masortingce

Je veux dire que nous obtenons le meilleur de O (n 2.81 ) avec une solution complexe mais des résultats parfaits, mais s’il existe une solution permettant même une approximation de la multiplication de masortingces, comme nous avons des formules d’approximation factorielle, etc.

s’il y en a tu sais que ça m’aidera

Cordialement.

    Le meilleur algorithme de multiplication de masortingce connu à ce jour est “l’algorithme de Coppersmith-Winograd” avec une complexité de O (n 2.38 ), mais il n’est pas utilisé à des fins pratiques.

    Cependant, vous pouvez toujours utiliser “l’algorithme de Strassen” qui a une complexité de O (n 2.81 ), mais il n’existe aucun algorithme connu pour la multiplication de masortingce avec une complexité de O (n).

    Il existe une limite inférieure théorique pour la multiplication de masortingce en O (n ^ 2), car vous devez toucher autant d’emplacements mémoire pour effectuer la multiplication. Comme d’autres l’ont déjà dit, il existe des algorithmes qui nous laissent tomber sous O (n ^ 3), mais sont généralement peu pratiques dans les conditions réelles d’utilisation.

    Si vous devez accélérer le processus, vous pouvez consulter les algorithmes cache Oblivious, tels que celui-ci ( http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.44.5650 ), qui accélèrent les performances. en effectuant des opérations de manière cohésive dans le cache, en s’assurant que les données sont dans le cache en cas de besoin.

    Réponse courte: non

    Réponse longue: Il existe des moyens si vous avez des types de masortingces spéciaux (par exemple une masortingce diagonale). Les meilleurs algorithmes de multiplication de masortingces peuvent vous réduire à quelque chose comme O (n 2.4 ) ( http://en.wikipedia.org/wiki/Coppersmith-Winograd_algorithm ). Le principal avec lequel je suis un peu familier utilise un algorithme de division et de conquête pour répartir la charge de travail (et non celle à laquelle j’ai lié).

    J’espère que ça aide!

    Si les masortingces sont connues pour être diagonales, vous pouvez les multiplier en opérations O(N) . Mais en général, vous ne pouvez pas.

    Les masortingces ont O (n 2 ) éléments et chaque élément doit être pris en compte au moins une fois pour le résultat. Il est donc impossible pour un algorithme de multiplication de masortingce de fonctionner en moins de O (n 2 ) opérations.

    Si

    • vos masortingces sont grandes
    • ils ont beaucoup de zéros
    • vous êtes prêt à les stocker dans des formats étranges

    vous pouvez concevoir des algorithmes dont la complexité dépend uniquement du nombre d’éléments non nuls. Cela peut être obligatoire pour certains problèmes (par exemple, les méthodes d’éléments finis).

    Non! Je ne pense pas.

    Il n’est pas possible d’utiliser une machine de traitement en parallèle avant d’utiliser une machine. Cela aussi, il a ses propres dépendances et limitations.

    Jusqu’à présent, ce n’est pas encore atteint.

    Si vous avez processeurs et une architecture à mémoire partagée, vous pouvez multiplier deux masortingces en temps O(n) … mais ceci n’est que théorique.