Как найти количество локальных максимумов

zss, не работает

Добавлено через 6 минут
zss, а точнее быть не выводит элементы, либо не верно выводит

Добавлено через 1 час 19 минут
Dimension, т.е. так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for(int i = 1; i<n-1 ;i++)
    {
        for(int j = 1;j<m-1;j++)
            if( arr[i][j]>arr[i][j-1] && 
         arr[i][j]>arr[i][j+1]&& 
        arr[i][j]>arr[i-1][j] && 
        arr[i][j]>arr[i+1][j] &&
        arr[i][j]>arr[i-1][j-1] &&
        arr[i][j]>arr[i-1][j+1] &&
        arr[i][j]>arr[i+1][j-1] &&
        arr[i][j]>arr[i+1][j+1])
        cout<<i<<' '<<j<<' '<<arr[i][j]<<endl;
    }

Добавлено через 3 минуты
Dimension, zss, теперь смотрим что получается….
Сам код:

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{   
    char name[1024];
    cout<< "vvedite name faila:";
    cin >> name;
    strcat(name, ".txt");
 
    int **arr=NULL;
    int n,m;
 
    ifstream inp(name);
    if(inp)
    {
        inp>>n>>m;
        arr=new int*[n];
        for(int i = 0; i<n ;i++)
        {
            arr[i]=new int[m];
 
            for(int j = 0;j<m;j++)
            {
                inp>>arr[i][j];
            }
 
        }
        inp.close();
    }
    else
    {
        cout<<"nVvod_ERRn";
        system("pause");
        return 1;
    }
    ofstream outf("output.txt");
    if(!outf)
    {
        cout<<"nVyvod_ERRn";
        system("pause");
        return 1;
 
    }
    for(int i = 1; i<n-1 ;i++)
    {
        for(int j = 1;j<m-1;j++)
            if( arr[i][j]>arr[i][j-1] && 
         arr[i][j]>arr[i][j+1]&& 
        arr[i][j]>arr[i-1][j] && 
        arr[i][j]>arr[i+1][j] &&
        arr[i][j]>arr[i-1][j-1] &&
        arr[i][j]>arr[i-1][j+1] &&
        arr[i][j]>arr[i+1][j-1] &&
        arr[i][j]>arr[i+1][j+1])
        cout<<i<<' '<<j<<' '<<arr[i][j]<<endl;
    }   
    outf.close();   
    for(int i = 0; i<n ;i++)
       delete[] arr[i];
    delete[] arr;   
    system("pause");
    return 0;
}

Входные данные в файле vhod:
5 5
1 3 2 4 5
3 4 5 2 1
1 2 2 7 1
2 4 6 3 2
7 2 2 4 2

Результат выполнения программы

Добавлено через 1 минуту
Dimension, zss, почему он выводит 2 3 7 не особо понятно. большинство элементов тупо не засчитал он

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    You are given an array on n-elements. An extrema is an elements which is either greater than its both of neighbors or less than its both neighbors. You have to calculate the number of local extrema in given array. 
    Note : 1st and last elements are not extrema.

    Examples : 

    Input : a[] = {1, 5, 2, 5}
    Output : 2
    
    Input : a[] = {1, 2, 3}
    Output : 0

    Approach :For calculating number of extrema we have to check whether an element is maxima or minima i.e. whether it is greater than both of its neighbors or less than both neighbors. For this simply iterate over the array and for each elements check its possibility of being an extrema.

    Note: a[0] and a[n-1] has exactly one neighbour each, they are neither minima nor maxima.

    Implementation:

    C++

    #include <bits/stdc++.h>

    using namespace std;

    int extrema(int a[], int n)

    {

        int count = 0;

        for (int i = 1; i < n - 1; i++)

        {

            count += (a[i] > a[i - 1] && a[i] > a[i + 1]);

            count += (a[i] < a[i - 1] && a[i] < a[i + 1]);

        }

        return count;

    }

    int main()

    {

        int a[] = { 1, 0, 2, 1 };

        int n = sizeof(a) / sizeof(a[0]);

        cout << extrema(a, n);

        return 0;

    }

    Java

    import java.io.*;

    class GFG {

        static int extrema(int a[], int n)

        {

            int count = 0;

            for (int i = 1; i < n - 1; i++)

            {

                if(a[i] > a[i - 1] && a[i] > a[i + 1])

                    count += 1;

                if(a[i] < a[i - 1] && a[i] < a[i + 1])

                    count += 1;

            }

            return count;

        }

        public static void main(String args[])

                                throws IOException

        {

            int a[] = { 1, 0, 2, 1 };

            int n = a.length;

            System.out.println(extrema(a, n));

        }

    }

    Python3

    def extrema(a, n):

        count = 0

        for i in range(1, n - 1) :

            count += (a[i] > a[i - 1] and a[i] > a[i + 1]);

            count += (a[i] < a[i - 1] and a[i] < a[i + 1]);

        return count

    a = [1, 0, 2, 1 ]

    n = len(a)

    print(extrema(a, n))

    C#

    using System;

    class GFG {

        static int extrema(int []a, int n)

        {

            int count = 0;

            for (int i = 1; i < n - 1; i++)

            {

                if(a[i] > a[i - 1] && a[i] > a[i + 1])

                    count += 1;

                if(a[i] < a[i - 1] && a[i] < a[i + 1])

                    count += 1;

            }

            return count;

        }

        public static void Main()

        {

            int []a = { 1, 0, 2, 1 };

            int n = a.Length;

        Console.WriteLine(extrema(a, n));

        }

    }

    PHP

    <?php

    function extrema($a, $n)

    {

        $count = 0;

        for ($i = 1; $i < $n - 1; $i++)

        {

            $count += ($a[$i] > $a[$i - 1] and

                       $a[$i] > $a[$i + 1]);

            $count += ($a[$i] < $a[$i - 1] and

                       $a[$i] < $a[$i + 1]);

        }

        return $count;

    }

    $a = array( 1, 0, 2, 1 );

    $n = count($a);

    echo extrema($a, $n);

    ?>

    Javascript

    <script>

       function extrema(a,  n)

        {

            let count = 0;

            for (let i = 1; i < n - 1; i++)

            {

                if(a[i] > a[i - 1] && a[i] > a[i + 1])

                    count += 1;

                if(a[i] < a[i - 1] && a[i] < a[i + 1])

                    count += 1;

            }

            return count;

        }

            let a = [ 1, 0, 2, 1 ];

            let n = a.length;

            document.write(extrema(a, n));

    </script>

    Time Complexity: O(n)
    Auxiliary Space: O(1)

    Last Updated :
    29 Jul, 2022

    Like Article

    Save Article


    This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
    Learn more about bidirectional Unicode characters

    Show hidden characters

    Random massive = new Random();
    const int massiveSize = 30;
    int[] maximum = new int[massiveSize];
    for (int i = 0; i < maximum.Length; i++)
    {
    maximum[i] = massive.Next(0, 1000);
    Console.WriteLine(maximum[i]);
    }
    if (maximum[0] > maximum[1])
    {
    Console.WriteLine($»nЛокальный максимум первый элемент {maximum[0]}»);
    }
    if (maximum[maximum.Length — 1] > maximum[maximum.Length — 2])
    {
    Console.WriteLine($»nЛокальный максимум последний элемент {maximum[maximum.Length — 1]}»);
    }
    for (int i = 1; i < massiveSize — 1; ++i)
    {
    if (maximum[i — 1] < maximum[i] && maximum[i + 1] < maximum[i])
    {
    Console.WriteLine(«nСписок локальных максимумовt» + maximum[i]);
    }
    }

    Нахождение локальных максимумов в одномерном массиве

    Есть ли простой способ найти локальные максимумы в 1D-массиве?

    Скажем, у меня есть массив:

    [ 0,
      1,
      10, <- max
      8,  <- (ignore)
      3,
      0,
      0,
      4,
      6,  <- (ignore)
      10, <- max
      6,  <- (ignore)
      1,
      0,
      0,
      1,
      4,  <- max
      1,
      0 ]
    

    Я хочу, чтобы он нашел 10 и 4, но игнорировал 8 и 6, так как они находятся рядом с 10 секундами. Математически вы могли бы найти, где производная равна нулю, если бы она была функцией. Я не слишком уверен, как это сделать в Javascript.

    30 июль 2014, в 22:32

    Поделиться

    Источник

    maxes = []
    for (var i = 1; i < a.length - 1; ++i) {
        if (a[i-1] < a[i] && a[i] > a[i+1])
            maxes.push(a[i])
    } 
    

    tohava
    30 июль 2014, в 21:30

    Поделиться

    Это вернет массив всех пиков (локальных максимумов) в данном массиве целых чисел, также заботясь о плато:

    function findPeaks(arr) {
      var peak;
      return arr.reduce(function(peaks, val, i) {
        if (arr[i+1] > arr[i]) {
          peak = arr[i+1];
        } else if ((arr[i+1] < arr[i]) && (typeof peak === 'number')) {
          peaks.push(peak);
          peak = undefined;
        }
        return peaks;
      }, []);
    }
    
    findPeaks([1,3,2,5,3])   // -> [3, 5]
    findPeaks([1,3,3,3,2])   // -> [3]
    findPeaks([-1,0,0,-1,3]) // -> [0]
    findPeaks([5,3,3,3,4])   // -> []
    

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

    Alexander Makarenko
    02 март 2017, в 21:46

    Поделиться

    Этот код обнаруживает локальные экстремумы (min и max, где первый вывод равен 0 и), даже если следующие элементы будут иметь равные значения (не уникальные экстремумы — т.е. 3 ‘выбирается из 1,1,1, 3,3,3,2,2,2)

    var GoAsc  = false;      //ascending move
    var GoDesc = false;      //descending move
    var myInputArray = [];
    var myExtremalsArray = [];
    var firstDiff;
    
    for (index = 0; index < (myArray.length - 1); index++) {
        //(myArray.length - 1) is because not to exceed array boundary, 
        //last array element does not have any follower to test it
    
      firstDiff = ( myArray[index] - myArray[index + 1] );
    
       if ( firstDiff > 0 )   { GoAsc  = true;  }
       if ( firstDiff < 0 )   { GoDesc = true;  }
    
       if ( GoAsc === true && GoDesc === true )  {  
            myExtremalsArray.push(myArray[index]);
            GoAsc  = false ;     
            GoDesc = false;     
            //if firstDiff > 0 ---> max
            //if firstDiff < 0 ---> min
          }
    
     }
    

    user3473058
    05 сен. 2014, в 09:32

    Поделиться

    Math.max выполняется для этого, но вместо массива он принимает ряд аргументов.

    apply вызывает функцию с аргументами, переданными как массив.

    Math.max.apply(null, array) делает трюк.

    Joe Maffei
    17 дек. 2017, в 18:26

    Поделиться

    Две ситуации: когда у вас есть пик, который является значением больше предыдущего и больше следующего, и плато, которое является значением, большим, чем предыдущее, и равно следующему (-ым), пока вы не найдете следующее другое значение, которое мне нужно меньше.

    поэтому, когда вы нашли плато, временно создайте массив из этой позиции «до конца» и найдите следующее другое значение (Array.prototype. find возвращает первое значение, которое соответствует условию) и убедитесь, что оно меньше первого значения плато.

    эта конкретная функция вернет индекс первого значения плато.

    function pickPeaks(arr){
      return arr.reduce( (res, val, i, self) => {
        if(
          // a peak when the value is greater than the previous and greater than the next
          val > self[i - 1] && val > self[i + 1] 
          || 
          // a plateau when the value is greater than the previuos and equal to the next and from there the next different value is less
          val > self[i - 1] && val === self[i + 1] && self.slice(i).find( item =>  item !== val ) < val 
        ){
          res.pos.push(i);
          res.peaks.push(val);
        }
        return res;
      }, { pos:[],peaks:[] } );
    }
    
    console.log(pickPeaks([3,2,3,6,4,1,2,3,2,1,2,3])) //{pos:[3,7],peaks:[6,3]}
    console.log(pickPeaks([-1, 0, -1])) //{pos:[1],peaks:[0]}
    console.log(pickPeaks([1, 2, NaN, 3, 1])) //{pos:[],peaks:[]}
    console.log(pickPeaks([1, 2, 2, 2, 1])) //{pos: [1], peaks: [2]} (plateau!)

    Julian
    29 май 2017, в 20:34

    Поделиться

    более декларативный подход:

    const values = [3, 2, 3, 6, 4, 1, 2, 3, 2, 1, 2, 3];
    
    const findPeaks = arr => arr.filter((el, index) => {
      return el > arr[index - 1] && el > arr[index + 1]
    });
      
    console.log(findPeaks(values)); // => [6, 3]

    vitkon
    23 дек. 2016, в 17:26

    Поделиться

    Как насчет простой итерации?

    var indexes = [];
    var values = [0,1,10,8,3,0,0,4,6,10,6,1,0,0,1,4,1,0];
    for (var i=1; i<values.length-1; i++)
        if (values[i] > values[i-1] && values[i] > values[i+1])
            indexes.push(i);
    

    barak manos
    30 июль 2014, в 19:59

    Поделиться

    Ещё вопросы

    • 0Jquery меню не прячется при отпускании мыши
    • 0Переместить div горизонтально, а затем вертикально
    • 1Python создает столбец на основе того, является ли строка подстрокой в панде Dataframe
    • 0Попытка получить список групп для пользователя, использующего SPServices
    • 0Правильный SQL-запрос — Обновление записей, где заголовок совпадает
    • 0Как я могу добавить кнопку, которая могла бы скрыть или расширить мою боковую панель страницы сообщения?
    • 0PHP парсинг XML
    • 1System.Threading API для Windows Phone 8
    • 1Python — необычное вещание для загадки особого случая
    • 0Angularjs отображать HTML в специальных символах
    • 0jQuery анализирует xml и группирует по определенному атрибуту
    • 0Вывести кортеж в списке STL
    • 0Опция пользовательского пейджера Bxslider
    • 1Возможно ли манипулирование CSS-данными через Integer в GWT?
    • 1Каждый из next () и list () перебирает генератор с изменяемым объектом по-разному
    • 0Я не могу отправить сообщение используя .php
    • 0Jqgrid Отправляет неверный параметр в строке запроса после второго вызова get
    • 0Как ограничить пользовательское минимальное значение размером потока менее одного бита?
    • 1Как условно установить деструктуризацию
    • 0почему ссылки cdn ставятся внизу индексного файла
    • 0AngularJS: поделиться общей фабрикой для создания нового объекта
    • 0Qt Включить путь
    • 0Гоночная игра на с / с ++ с графикой
    • 1Не удается найти элемент с помощью Selenium
    • 1Создание класса с помощью защищенного конструктора
    • 1Не удается правильно прочитать словарь, сохраненный как файл json
    • 0Как я могу обновить ту же запись SqlServer внутри цикла sqlsrv_fetch_array?
    • 0libssh2_config.h не создается при установке libssh2
    • 0создать класс с помощью ввода из cin, полученного с помощью оператора >>
    • 0Значения новых входных данных (by appendChild) не передаются формой
    • 1Как получить строку текста, которая находится между двумя ‘{‘ круглыми скобками ‘}’, установленными с помощью .NET?
    • 1Может кто-нибудь помочь с этим кодом MSDN?
    • 1Android Runnable не выполняется MainLooper
    • 0Средневзвешенное значение по порядку в углах
    • 1Запрос OData без части составного первичного ключа в URL
    • 1Стрекоза не печатает символы, требующие нажатия Alt Gr, такие как {или [
    • 1Paramiko использует 100 CPU и скорость снижается, если несколько сценариев Paramiko выполняются одновременно
    • 0Qt — Приложение Quick 2 из нового проекта (файл main.qml не найден)
    • 0HTML читается как недопустимый, перемещая содержимое <head> HTML в <body>
    • 0Угловая проверка разрешений JS
    • 1Java — Защищенный метод недоступен из подкласса
    • 1Сохранить порядок значений в двоичной матрице в Python
    • 1Pythonic способ перебирать списки внутри dict параллельно как dict
    • 0C ++: перенаправить код на определенную позицию
    • 0Как использовать jQuery «автозаполнение источника» внутри цикла JavaScript для?
    • 0Данные angularjs в службе не могут быть разделены между различными контроллерами
    • 1ошибка: [Dagger / MissingBinding] при попытке построения проекта
    • 0Div открывается вертикально, когда страница загружается с помощью JavaScript и CSS
    • 0Php oci8 и другие расширения
    • 0Хранить объемные изображения в $ localStorage — Angular JS

    Сообщество Overcoder

    Find Local Maxima

    Найдите локальные максимумы в матрицах

    • Библиотека:
    • Computer Vision Toolbox / Статистика

    Описание

    Блок Find Local Maxima находит локальные максимумы в данной входной матрице. Блок находит локальные максимумы значений в области заданными размером окружения. Блок сравнивает значения в поисковой области к заданному пользователями порогу и идентифицирует значение, которое больше или равно порогу как локальный максимум. Порог и размер района должны быть выбраны таким образом, что блок обнаруживает только истинные локальные максимумы и устраняет ложный peaks.

    Вход с этим блоком может также быть матрицей Хью, сгенерированной от блока Hough Transform. Блок Find Local Maxima выводит на основе одно [x
    y] координаты обнаруженных локальных максимумов. Данные, отправленные во все входные порты, должны быть совпадающим типом данных.

    Порты

    Входной параметр

    развернуть все

    I входной параметр
    M-by-N матрица

    Введите в виде M-by-N матрицу, в которой вы хотите обнаружить локальные максимумы. Если вход является матрицей Хью выход от блока Hough Transform, выберите параметр Input is Hough matrix spanning full theta range.

    Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

    Th — Порог для обнаружения локальных максимумов
    скаляр

    Порог для обнаруживающих локальных максимумов в виде скаляра.

    Зависимости

    Чтобы включить этот порт, установите параметр Source of threshold value на Input port.

    Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixed point

    Вывод

    развернуть все

    Idx — Координаты локальных максимумов
    P-by-2 матрица

    Координаты локальных максимумов, возвращенных как P-by-2 матрица на основе одного [x
    y] координаты. P представляет количество локальных максимумов.

    Типы данных: single | double | uint8 | uint16 | uint32

    Count — Количество локальных максимумов
    скаляр

    Количество локальных максимумов, возвращенных как скаляр.

    Зависимости

    Чтобы включить этот порт, снимите флажок для параметра Output variable size signal.

    Типы данных: single | double | uint8 | uint16 | uint32

    Параметры

    развернуть все

    Maximum number of local maxima — Максимальное количество локальных максимумов, чтобы обнаружить
    2 (значения по умолчанию) | положительное целое число

    Задайте максимальное количество локальных максимумов, чтобы обнаружить во входной матрице. Значение должно быть положительным целым числом, больше, чем 0.

    Neighborhood size — Размер области окружения
    [5 7 ] (значение по умолчанию) | вектор с 2 элементами

    Задайте размер области окружения как двухэлементный вектор в форме [r c]
    . Вектор задает размер окна r ×c, в котором блок определяет локальные максимумы. Размер окна должен быть больше или быть равен 1×1.

    Source of threshold value — Источник, чтобы ввести пороговое значение
    Specify via dialog (значение по умолчанию) | Input port

    Задайте источник для ввода порогового значения. Если вы выбираете Input port, порт Th осушен на блоке. Если вы выбираете Specify via dialog, параметр Threshold отсоединен.

    Threshold — Порог для обнаружения локальных максимумов
    скаляр

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

    Зависимости

    Чтобы включить этот параметр, установите параметр Source of threshold value на Specify via dialog.

    Input is Hough matrix spanning full theta range — Является ли введенный матрицей Хью
    от (значения по умолчанию) | на

    Выберите параметр, если вход с этим блоком является матрицей Хью выход от блока Hough Transform. Блок Find Local Maxima принимает, что вход является матрицей Хью, которая антисимметрична об оси ро со значениями теты от-pi/2 до радианов пи/2. В результате, если локальный максимум около контура и его области окружения вне матрицы Хью, блок игнорирует соответствующий антисимметричный максимум.

    Index output data type — Тип данных для координат локальных максимумов
    uint32 (значение по умолчанию) | double | single | uint8 | uint16

    Задайте тип данных для координат локальных максимумов, возвращенных в выходном порту Idx.

    Output variable size signal — Поддержите входные сигналы различной длины
    на (значении по умолчанию) | прочь

    Задайте, поддерживает ли модель входные сигналы различной длины.

    Count output data type — Тип данных для количества локальных максимумов
    uint32 (значение по умолчанию) | double | single | uint8 | uint16

    Задайте тип данных для количества локальных максимумов, возвращенных в выходном порту Count.

    Зависимости

    Чтобы включить этот параметр, очистите параметр Output variable size signal.

    Характеристики блока

    Типы данных

    double | fixed point | integer | single

    Многомерные сигналы

    no

    Сигналы переменного размера

    yes

    Расширенные возможности

    Генерация кода C/C++
    Генерация кода C и C++ с помощью Simulink® Coder™.

    Представлено до R2006a

    Понравилась статья? Поделить с друзьями:
  • Как найти тут тепловой энергии
  • Как найти половину квадратного сантиметра
  • У отца вторая семья как их найти
  • Как найти площадь закрашенного четырехугольника
  • Как найти парня если боишься