Я пытаюсь написать псевдокод, чтобы найти все точки седла в 2D-массиве. Седловые точки - это пятна, где значение - это минимальное значение в его строке, но максимальное значение в его столбце или максимальное значение в его строке и минимальное значение в его столбце.Как найти седловые точки в двумерном массиве?
У меня возникли проблемы с тем, как хранить эти значения, особенно если в одной строке или столбце есть две точки седла. Я также не уверен, что если я даже приблизился к этому правильно, возможно, это можно сделать более эффективным способом?
Массив задается A [x] [y], где x - строка, а y - столбец.
До сих пор мой (очень простой) псевдокод
for r=0 to y-1 // iterates through every row
for c=0 to x-1 //iterates through every element in row r
min=min(A[c][r]) //finds the minimum value in row r
for p=0 to y-1 //iterates through every element in col c
max=max(A[c][p]) //finds max in col c
if min==max
saddle point=A[c][p]
Если у вас есть синусоидальная волна в течение периода 10π, у вас будет много минимумов и максимумов; вы не можете просто искать минимум в столбце (или строке).Для каждого значения вы должны посмотреть на следующее и предыдущие значения в столбце (или строке) и посмотреть, меньше ли текущее значение, чем оба, или больше, чем оба, идентифицируя локальный минимум или максимум. Затем вам нужно посмотреть в другом направлении и посмотреть, находитесь ли вы на локальном максимуме или минимуме в этом направлении. Только если оба выполняются одновременно, вы находитесь в седловой точке. –
Может ли кто-нибудь объяснить, как найти, есть ли два равных минимума подряд? Скажем, что первый и последний элементы одинаковы, и они кажутся минимальными, как бы я отслеживал их? – Newbie18
Это вопрос определения того, будут ли края считаться максимумами или минимумами. У вас может быть много локальных максимумов или минимумов в одной строке или столбце. Так как может быть много седловых очков, вам нужно будет отследить их всех - список седловых очков. Я предполагаю, что у вас будет цикл 'for r = 0 to y-1', содержащий цикл' for c = 0 to x-1', а тело внутреннего цикла будет смотреть, есть ли у вас локальный максимум или минимум в направлении строки (продолжая следующий «c», если нет), а затем проверьте, есть ли у вас локальный минимум или максимум в направлении столбца и т. д. Однако я его не закодировал. –