Мне нужно транспонировать квадратную матрицу, представленную массивом символов. Есть ли способ выполнить его менее чем o (n^2) сложности? В любом случае, каков наиболее эффективный кэш-способ?Эффективный алгоритм преобразования матрицы
ответ
Это всегда будет O (NM), так как вы должны вычислить соответствующее транспонирования координат для каждого элемента:
// char matrix[N * M]
// char transpose[N * M]
for(int i = 0; i < N*M; i++)
transpose[i] = matrix[ (M * (i % N)) + (i/N) ];
Если вы делаете это с матрицами NxN, то он будет считать O (N^2) для вычисления транспонирования. Если вам не нужно хранить транспонирование, вы можете просто перебирать его, инвертируя свои индексы и эффективно выполняйте то же самое без дополнительной памяти.
им жаль, он должен быть двухмерным массивом. – user2740785
Сложность времени одинакова независимо от размера массива (как вы индексируете память). – Joel
Нет, вы не можете сделать это менее чем O(n^2)
, и причина в том, что вам нужно хотя бы коснуться каждого элемента в матрице один раз (это уже (n * n)). Поэтому вы не можете сделать лучше .
лучшее, что вы можете сделать, это использовать O(1)
дополнительной памяти (не раз) делать на месте транспонированной матрицы (которая хорошо описанные в wikipedia).
Обратите внимание, что вы не всегда нужны вычислить транспонирование матрицы . Для многих приложений вы можете просто поменять координаты (если вам нужно A[i][j]
- просто верните A[j][i]
-й элемент)
Вы также можете добавить 1-битный флаг в свой матричный класс, превратив операцию транспонирования просто в xor на этот флаг O (1). Все операторы доступа к матричным элементам должны затем обменивать индекс строки с индексом столбца, если установлен флаг транспонирования.
- 1. Эффективный алгоритм вычисления матрицы
- 2. Эффективный способ преобразования 3D-матрицы
- 3. Эффективный алгоритм для индексного преобразования
- 4. эффективный алгоритм поиска совпадения матрицы фраз
- 5. Эффективный алгоритм преобразования между цифровой системой
- 6. Простой алгоритм для обратного преобразования матрицы
- 7. Алгоритм сохранения стека матрицы преобразования в графике
- 8. Что такое быстрый алгоритм преобразования матрицы квадратов в треугольную полосу?
- 9. применить все матрицы преобразования
- 10. Эффективный способ преобразования матрицы Matlab в массив в C++
- 11. преобразования матрицы списков регулярной матрицы
- 12. Эффективный алгоритм для преобразования фракции в целое число
- 13. Эффективный алгоритм преобразования набора символов в nfa/dfa
- 14. алгоритм для нахождения матрицы преобразования между двумя матрицами.
- 15. Эффективный кортеж алгоритм поиска
- 16. Эффективный алгоритм для переименования
- 17. Эффективный бит переназначения алгоритм
- 18. f # fibbonaci эффективный алгоритм
- 19. Эффективный алгоритм обнаружения совпадений
- 20. - это эффективный алгоритм?
- 21. Предложить эффективный алгоритм
- 22. Эффективный алгоритм (Хеширование, Сортировка)
- 23. Эффективный декартовы алгоритм продукта
- 24. Эффективный алгоритм для уравнения
- 25. Эффективный генетический алгоритм
- 26. Эффективный алгоритм knn
- 27. Эффективный алгоритм связывания частиц
- 28. Эффективный алгоритм резки кадров
- 29. Эффективный алгоритм Ньютона
- 30. Эффективный алгоритм таймера
Вы должны указать, что означает n. Ответ Сальвадора Дали интерпретирует n как количество строк. Другим разумным толкованием будет количество элементов. Одно возможно, а другое нет. – Praxeolitic