Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для Vinemax
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785

Найти последовательность в массиве

11.06.2021, 14:35. Показов 3055. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!

Подскажите, пожалуйста, возможно ли средствами .NET (C# или VB) в одномерном массиве чисел найти определенную последовательность чисел? Например, есть массив {1, 6, 3, 2, 9} и в нём нужно найти, скажем, { 3, 2 }. Желательно, не применяя цикл. Может быть есть какая-то встроенная подобная операция для массивов, чтобы как можно быстрее выполнялось?

Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2021, 14:35
Ответы с готовыми решениями:

Найти в массиве целых чисел самую длинную не повторяющуюся последовательность
Необходимо найти самую длинную серию. Серией называется последовательность различных чисел. Язык C#

В массиве из 12 элементов числа образуют неубывающая последовательность. Найти количество различных чисел в массиве
В массиве из 12 элементов числа образуют неубывающая последовательность. Найти количество различных чисел в массиве.

В массиве из 20 элементов числа образуют неубывающую последовательность. Найти количество различных чисел в массиве.
В массиве из 20 элементов числа образуют неубывающую последовательность. Найти количество различных чисел в массиве.

10
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
11.06.2021, 16:15
Vinemax,
.. может быть сравнить Array.IndexOf() двух чисел, и если +1, то нашли ...
1
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
11.06.2021, 16:54
Vinemax, не применяя цикл перебрать последовательность?) Вы же понимаете, что за любым чудо-linq-методом все равно цикл стоит?
1
 Аватар для Vinemax
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
11.06.2021, 19:04  [ТС]
Usaga, ну одно дело реализовывать свой цикл, работающий медленно по причине интерпретатора CLR, а другое - использовать какие-то встроенные методы, работающие на низком уровне. Дело в том, что сам изначальный массив, в котором у меня идет поиск, достаточно большой, даже огромный, и мне нужно находить в нем все такие вхождения более мелких последовательностей. То есть, одна какая-то последовательность может в этом массиве встречаться сотни раз.
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
12.06.2021, 04:25
Цитата Сообщение от Vinemax Посмотреть сообщение
ну одно дело реализовывать свой цикл, работающий медленно по причине интерпретатора CLR, а другое - использовать какие-то встроенные методы, работающие на низком уровне.
90% "встроенных методов" написаны на C# и находятся в тех же условиях, что и код, который напишете вы. Если что-то у вас будет работать медленно, то виноваты в этом будут не CLR, JIT и GC, а ваши кривые руки.

Цитата Сообщение от Vinemax Посмотреть сообщение
Дело в том, что сам изначальный массив, в котором у меня идет поиск, достаточно большой, даже огромный, и мне нужно находить в нем все такие вхождения более мелких последовательностей. То есть, одна какая-то последовательность может в этом массиве встречаться сотни раз.
Это классическая задача поиска подстроки. Алгоритмов её решения малый миллион.
0
 Аватар для Vinemax
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
12.06.2021, 05:34  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
90% "встроенных методов" написаны на C#
Хотите сказать, что, например, Array.IndexOf или Array.Contains работают так же по времени, как и поиск с помощью For или While ?

Добавлено через 2 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Это классическая задача поиска подстроки. Алгоритмов её решения малый миллион
Тогда подскажите, пожалуйста, один из миллиона решений такой задачи?
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
12.06.2021, 05:37
Цитата Сообщение от Vinemax Посмотреть сообщение
Хотите сказать, что, например, Array.IndexOf или Array.Contains работают так же по времени, как и поиск с помощью For или While ?
В этих волшебных методах используются те самые for и while. Вы уже десять лет на этом форуме и всё ещё думаете, что перебрать множество можно без цикла, да?

Цитата Сообщение от Vinemax Посмотреть сообщение
Тогда подскажите, пожалуйста, один из миллиона решений такой задачи?
Вас в гугле забанили?
0
 Аватар для Vinemax
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
12.06.2021, 05:58  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
В этих волшебных методах используются те самые for и while
Давайте не будем ссориться? ) Я знаю, что в одном из моих давних проектов по распознаванию больших прайс-листов я изначально использовал именно For и While, а вот после того, как эти моменты я переделал под IndexOf и ему подобные методы, распознавание стало происходить примерно в 30 раз быстрее. Безусловно, что любой подобный поиск использует циклы, это очевидно, но одно дело цикл, написанный на Ассемблере или C++, даже на VB6, а другое на VB или C# .NET. И не говорите, пожалуйста, что, например, логика пространств System.Collections.Generic, как и System.Security.Cryptography или System.IO.Compression, реализована на чистом C#.
Цитата Сообщение от Usaga Посмотреть сообщение
Вас в гугле забанили?
Если бы Гугл мне помог, поверьте, я бы не спрашивал здесь.

В общем, как я понял, более быстрого метода поиска последовательности чисел в массиве на C# или VB, чем тот, что я знаю, нет.
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
12.06.2021, 06:03
Цитата Сообщение от Vinemax Посмотреть сообщение
логика методов System.Collections.Generic
... реализована на чистом C#. Сами можете посмотреть код любого класса из этого пространства имён.

Цитата Сообщение от Vinemax Посмотреть сообщение
распознавание стало происходить примерно в 30 раз быстрее.
Это значит что ваш алгоритм в 30 раз хуже, а не то, что виноваты for и while. Вот и всё. Т.е. тезис о кривых руках остаётся в силе.

Цитата Сообщение от Vinemax Посмотреть сообщение
Если бы Гугл мне помог, поверьте, я бы не спрашивал здесь.
А вы вообще искали? Я даже фразу озвучил по которой гуглить надо.
0
 Аватар для Vinemax
149 / 117 / 10
Регистрация: 12.09.2011
Сообщений: 785
12.06.2021, 06:26  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Это значит что ваш алгоритм в 30 раз хуже, а не то, что виноваты for и while
Этот алгоритм, как и сама программа, были мной написаны еще в конце 90-х на VB6 и работали на ура. Несколько лет назад я практически один в один перенес этот код на .NET и алгоритм стал работать во много раз медленнее. И только после переделки под встроенные методы и функции поиска и замены .NET алгоритм стал выполняться во много раз быстрее.

Ладно, этот спор ни к чему... Я ищу так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int[] Search = {0,1,2,3};
int Index = 0;
int FoundIndex = -1;
 
for (int i = 0; i <= Arr1.Count - 1; i++) 
{
    if (Arr1(i) == Search(Index)) 
    {
       Index += 1;
 
       if (Index == Search.Length) 
       {
          FoundIndex = i - Search.Length;
          break;
       }
    } 
    else 
    {
       Index = 0;
    }
}
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim Search(3) As Integer = {0, 1, 2, 3}
 
Dim Index as Integer = 0, FoundIndex As Integer = -1
 
For i As Integer = 0 To Arr1.Count - 1
 
  If Arr1(i) = Search(Index) Then
 
    Index += 1
 
    If Index = Search.Length Then
      FoundIndex = i - Search.Length
      Exit For
    End If
 
  Else
    Index = 0
  End If
 
Next
Думал, может быть можно быстрее.
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
12.06.2021, 08:43
Vinemax, алгоритмы поиска подстроки
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.06.2021, 08:43
Помогаю со студенческими работами здесь

Найти в массиве минимальный и максимальный элементы. Вывести последовательность значений из этого диапазона, не встречающихся в данном массиве
Найти в массиве минимальный и максимальный элементы. Вывести последовательность значений из этого диапазона, не встречающихся в данном...

Найти в массиве минимальный и максимальный элементы. Вывести последовательность значений из этого диапазона, не встречающихся в данном массиве
Сабж. Нашёл данное задание на данном форуме, решения не смотрел и сделал сам. Посмотрите есть ли ошибки. function myarr($arr){ ...

Найти самую длинную последовательность в массиве
Напишите функцию f(A), которая находит последнее в массиве A число, образующее максимально длинную серию. Если таких чисел несколько, то...

Найти в знакопеременном массиве последовательность с наибольшей суммой
Здравствуйте уважаемые программисты. Задали такое задание: Дан знакопеременный массив Х из n чисел, где n – номер варианта по списку,...

Найти в массиве самую длинную положительную последовательность
Дан массив размера N найти в нем самую длинную положительную последовательность


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru