powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Простейший и быстрейший способ проверки последовательности чисел на монотонность
5 сообщений из 5, страница 1 из 1
Простейший и быстрейший способ проверки последовательности чисел на монотонность
    #38062371
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Монотонная последовательность .

Ну, быстрейший, наверное, это через какую-нибудь булевскую переменную. Скажем, сравниваем первые два числа на "больше" и при любом результате - "тру". Затем следующие числа, начиная со второго, сравниваем на "меньше", и если хоть одно сравнение даст истину, то вернуть "фолс". Ну это так, на вскидку.

А что предложите вы? Меня интересуют также всякие экзотические варианты с Linq, лямбдами и прочим. И есть ли вообще встроенные функции проверки монотонности последовательности?
...
Рейтинг: 0 / 0
Простейший и быстрейший способ проверки последовательности чисел на монотонность
    #38062426
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

Общий вариант - так как у Вас, только не "сравниваем на меньше", наверное, а как-то так:
Код: c#
1.
2.
3.
4.
5.
6.
int i=1;
while(a[i-1]==a[i] && i<a.Length) ++i;
if(i==a.Length) return true;
if(a[i-1]<a[i]) {for(;i<a.Length; ++i) if(a[i-1]>a[i]) return false;}
else {for(;i<a.Length; ++i) if(a[i-1]<a[i]) return false;}
return true;

Лямбда-выражения тут использовать, ИМХО, довольно странно. Полагаю, можно создать последовательность разностей и применить к ней Any, но не факт, что это удачная идея.
...
Рейтинг: 0 / 0
Простейший и быстрейший способ проверки последовательности чисел на монотонность
    #38062597
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для любителей лямбд. Сам бы делал через while ;). В теории можно всю последовательность разбить на отрезки равной длины (за исключением последнего), проверить что конец смежного отрезка меньше(больше) начала следующего и параллельно проверять все эти отрезки в отдельных потоках.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
      
var itemCollection = new List<int> {1, 4, 5, 6, 7 ,4} ;
var result = itemCollection.Select((itemValue, index) => new { itemValue, index })
         .Any(itemWithIndex => itemWithIndex.index < itemCollection.Count - 1 
               && itemWithIndex.itemValue > itemCollection[itemWithIndex.index + 1]);

itemCollection = new List<int> { 1, 4, 5, 6, 7};
result = itemCollection.Select((itemValue, index) => new { itemValue, index })
         .Any(itemWithIndex => itemWithIndex.index < itemCollection.Count - 1
               && itemWithIndex.itemValue > itemCollection[itemWithIndex.index + 1]);
...
Рейтинг: 0 / 0
Простейший и быстрейший способ проверки последовательности чисел на монотонность
    #38063467
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, я немного ошибся. Но всё равно спасибо.

Я забыл уточнить, что последовательнось должна быть СТРОГО монотонной. Тогда код упрощается. Как у вас он изменится тогда?
...
Рейтинг: 0 / 0
Простейший и быстрейший способ проверки последовательности чисел на монотонность
    #38063468
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--что последовательнось должна быть СТРОГО монотонной

...т. к. является последовательностью аргументов функции.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Простейший и быстрейший способ проверки последовательности чисел на монотонность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]