Как реализовать алгоритм Peak Finder на C#?

Пользователь

от cooper.berge , в категории: Другие , 8 месяцев назад

Как реализовать алгоритм Peak Finder на C#?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от nicola , 8 месяцев назад

@cooper.berge 

Вот одна из возможных реализаций алгоритма Peak Finder на C#:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
static int FindPeak(int[] arr)
{
    int n = arr.Length;
    int left = 0;
    int right = n - 1;

    while (left <= right)
    {
        int mid = (left + right) / 2;

        // Сравниваем элемент со своими соседями
        if ((mid == 0 || arr[mid] >= arr[mid - 1]) && 
            (mid == n - 1 || arr[mid] >= arr[mid + 1]))
        {
            return arr[mid]; // Найден пиковый элемент
        }
        else if (mid > 0 && arr[mid - 1] > arr[mid]) // Идем влево
        {
            right = mid - 1;
        }
        else // Идем вправо
        {
            left = mid + 1;
        }
    }
    
    return -1; // Пиковый элемент не найден
}


Данный код реализует алгоритм бинарного поиска на отсортированном массиве. Он ищет пиковый элемент, который больше или равен своим соседям.


Вызов FindPeak(arr) вернет пиковый элемент массива arr, если такой элемент существует. В противном случае будет возвращено значение -1.

Пользователь

от forest , 2 месяца назад

@cooper.berge 

Приведенный код реализует алгоритм Peak Finder для поиска пикового элемента в массиве. Алгоритм работает на основе бинарного поиска и имеет логарифмическую сложность O(log n), где n - размер входного массива.


Для использования данной функции, можно передать в нее целочисленный массив (int[]), содержащий элементы для анализа, и она вернет пиковый элемент массива, если такой есть. Если пиковый элемент не найден, функция вернет значение -1.


Пример вызова функции и вывод результата:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3 };
int peak = FindPeak(arr);

if (peak != -1)
{
    Console.WriteLine("Peak element found: " + peak);
}
else
{
    Console.WriteLine("Peak element not found in the array.");
}


Помните, что данная реализация предназначена для отсортированных массивов, и она вернет только один из возможных пиковых элементов. В зависимости от требований задачи возможно потребуется модификация алгоритма.