Алгоритм Штрассена для реализации матричного умножения С#

Я просто занимаюсь самостоятельным изучением алгоритмов и структур данных, и я хотел бы знать, есть ли у кого-нибудь реализация алгоритма Штрассена для умножения матриц на С# (или С++)?

Я просто хотел бы запустить его и посмотреть, что он делает, и получить больше информации о том, как он работает.


person Tony The Lion    schedule 28.04.2010    source источник
comment
Примечание: это не домашнее задание! Это самостоятельная работа, сделанная в свободное время! Кто-то ошибочно пометил это как домашнее задание. Тони   -  person Tony The Lion    schedule 29.04.2010
comment
Для меня всегда было намного сложнее понять, как работает алгоритм, глядя на код... Я думаю, что в какой-нибудь хорошей книге или даже в википедии будет соответствующее описание того, как работает алгоритм или его псевдокод. А дело в том, что когда вы знаете, что HOW это работает, вы можете написать реализацию (если нужно) самостоятельно.   -  person M. Williams    schedule 29.04.2010
comment
Кроме того, stackoverflow.com/questions/1920031/   -  person M. Williams    schedule 29.04.2010
comment
Обратите внимание, что многие люди используют тег «домашнее задание» для определения педагогических вопросов, независимо от того, как вы к ним пришли. Это не является черной меткой или жалобой. См.: meta.stackexchange.com/ вопросы/41393/ . Я бы скорее увидел другой тег, используемый для этой цели, именно из-за вашей реакции, но, по моему мнению, эти вопросы относятся к категории «как работать».   -  person dmckee --- ex-moderator kitten    schedule 29.04.2010
comment
@dmckee: Я понимаю вашу точку зрения, я не воспринял это как черное замечание или что-то в этом роде, просто я видел здесь, на SO, людей, не желающих отвечать на вопросы, потому что они помечены как домашнее задание. Поскольку я не делаю домашнюю работу (уже работаю), я посчитал это неуместным тегом...   -  person Tony The Lion    schedule 29.04.2010
comment
Я согласен с Котти, но если вы действительно хотите увидеть реализацию этого метода, она есть на C в netlib:netlib.org/linalg/gemmw.tgz   -  person Adrien    schedule 29.04.2010
comment
Алгоритм Штрассена, вероятно, полезен только для умножения блочной матрицы/плитки, а не для умножения отдельных элементов. Таким образом, вы должны сначала оптимизировать алгоритм O (n ^ 3), а затем использовать алгоритм Штрассена для блоков, чтобы уменьшить количество блоков, которые вы должны умножить, за счет добавления большего количества блоков. Даже в этом случае вы, вероятно, не увидите ничего подходящего, пока размер не превысит 1000x1000.   -  person Z boson    schedule 21.08.2014


Ответы (1)


Отказ от ответственности: я не пробовал ни один из них, но, похоже, это то, что ищет OP. Эти ссылки были получены только при просмотре некоторых результатов Google Code Search.

Я нашел версию C#. В проекте нет излишеств; это просто источник. Тем не менее, похоже, он выполняет алгоритм только с моего первого беглого сканирования. В частности, вам следует просмотреть эту файл.

Для C++ я нашел некоторый код в этом проекте Google Code. Код, конечно, на английском, но вики вся на кириллице (русская?). В основном вам следует просматривать этот файл. Похоже, что у него есть как последовательная, так и параллельная версия алгоритма Штрассена.

Эти проекты могут быть не совсем правильными, но вам, возможно, захочется рассмотреть их более внимательно.

person Justin Peel    schedule 28.04.2010
comment
Люди, голосующие против без объяснения причин, заставляют меня не хотеть вносить свой вклад в SO. - person Justin Peel; 29.04.2010
comment
ссылка на «версию C#» больше недоступна. пожалуйста обновите - person deathrace; 05.03.2018