Я решил изучить параллелизм и хотел выяснить, как много способов могут перекрываться инструкциями из двух разных процессов. Код для обоих процессов представляет собой всего лишь 10-итерационный цикл с 3 инструкциями, выполняемыми в каждой итерации. Я выяснил, что проблема состоит в том, чтобы оставить X-инструкции фиксированными в некоторой точке, а затем поместить другие X-инструкции из другого процесса между пробелами, учитывая, что они должны быть упорядочены (инструкция 4 процесса B всегда должна предшествовать инструкции 20).
Я написал программу для подсчета этого числа, глядя на результаты, которые я обнаружил, что решением является n Комбинация k, где k - это количество инструкций, выполненных на протяжении всего цикла одного процесса, поэтому для 10 итераций это будет 30, а n равно k * 2 (2 процесса). Другими словами, n объектов с фиксированным n / 2 и необходимостью размещения n / 2 среди пробелов, при этом последние n / 2 не теряют своего порядка.
Хорошо, проблема решена. Нет, не совсем. Я понятия не имею, почему это так, я понимаю, что определение комбинации состоит в том, во сколько раз вы можете взять k элементов из группы n, чтобы все группы были разными, но порядок, в котором вы берете элементы, не ' не имеет значения. В этом случае у нас есть n элементов, и мы фактически берем их все, потому что все инструкции выполнены (n C n).
Если кто-то объясняет это тем, что в сумке есть 2k синих (A) и красных (B) объектов, и вы берете k предметов из сумки, вы все равно берете только k инструкций, когда фактически выполняется 2k инструкций. Не могли бы вы пролить свет на это?
Заранее спасибо.