powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
45 сообщений из 45, показаны все 2 страниц
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306086
xaoc2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Срочно ! ( осталось 3 часа ) Нужна реализация вот такого алгоритма:

Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения из списка B.

пример:

Код: plaintext
1.
2.
3.
4.
5.
f(A, B)
A = [ 1 , 2 , 3 , 4 , 5 , 3 , 2 , 4 , 8 , 5 ]
B=[ 5 , 2 , 3 ]
result = a(A, B)
// результат будет 2 так как кратчайшая последовательность
// начинается на второй позиции
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306097
xaoc2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс... ршибочка, я имелл в виду:
Код: plaintext
1.
2.
3.
.....
result = f(A, B)
...
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306129
xaoc2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь:
Код: plaintext
1.
2.
3.
4.
5.
6.
f(A, B)
A = [ 1 , 2 , 3 , 4 , 5 , 3 , 2 , 4 , 8 , 5 ]
B=[ 5 , 2 , 3 ]
result = a(A, B)
// результат будет 5 так как кратчайшая последовательность
// начинается на пятой позиции
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306139
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в форум "Работа"
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306185
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Больно не проверял но работает вроде.
(отсчет позиции у меня с нуля идет)

Код: plaintext
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.
 public static int GetPositionLeastSequence(int[] A, int[] B)
        {
            int[] check = new int[B.Length];
            int countChecked = 0;
            List<int[]> seqs = new List<int[]>();

            for (int i = 0; i < A.Length; i++)
            {
                for (int j = 0; j < B.Length; j++)
                {
                    if (A[i] == B[j])
                    {
                        check[j] = i;
                        countChecked++;

                        if (countChecked >= B.Length)
                            seqs.Add(check.ToArray());
                    }
                }
            }

            int minLen = A.Length;
            int[] result = null;
            int length = 0;

            for (int i = 0; i < seqs.Count; i++)
            {
                if ((length = seqs[i].Max() - seqs[i].Min()) < minLen)
                {
                    result = seqs[i];
                    minLen = length;
                }
            }

           return result.Min();

        }
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306208
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини чувак чета я там намудрил.
Код: plaintext
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.
     public static int GetPositionLeastSequence(int[] A, int[] B)
        {
            int[] check = new int[B.Length];
            int countChecked = 0;
            
            int length = A.Length;
            int position = 0;

            for (int i = 0; i < A.Length; i++)
            {
                for (int j = 0; j < B.Length; j++)
                {
                    if (A[i] == B[j])
                    {
                        check[j] = i;
                        countChecked++;

                        if (countChecked >= B.Length)
                        {
                            if (check[j] - check.Min() < length)
                            {
                                position = check.Min();
                                length = check[j] - check.Min();
                            }
                        }
                    }
                }
            }

           return position;

        }
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306211
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неверно и неэффективно.

невозможно решать такую задачу без учета ограничений.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306212
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dubov1994,

А че неверно то.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306215
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запусти при A = {2, 2, 2, 2}, B = {5, 2}.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306216
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dubov1994,

Ну это ты уже придираешься.
Автор просит найти - т.е.
негласное условие что она
уже там есть.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306217
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ок, A = {2, 2, 2, 2, 2, 5}, B = {5, 2}
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306218
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dubov1994,

Ладно уел.
Ну так покажи уже мастер-класс.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306219
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решение или код?
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306220
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dubov1994,

ну давай решение
кодом тебя утруждать
как-то неудобно.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306221
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не злись :-)

общий глупый алгоритм, поскольку об ограничениях топикстартер умолчал.
пусть M = B.length(), N = A.length();
отсортируем B;
будем двигать два указателя по массиву A, l и r, изначально l = r = 0;
пусть у нас будет массив C[B.length()] такой, что C[i] выражает количество чисел B[i] на отрезке [l; r];
научимся определять "хорошую" последовательность. для нас это означает, что для любого i из [0; B.length()-1] => C[i] > 0;
научимся по числу определять его номер в массиве B. поскольку он отсортирован, можно воспользоваться бинарным поиском для ускорения процесса (впрочем, собственно для этого мы его и сортировали). теперь мы можем уменьшать / увеличивать количество одинаковых чисел, существующих в B за O(log M) (C[binary_search(number)] +- 1).
теперь определим механизм движения указателей:
пока у нас последовательность на отрезке [l; r] "плохая", r++, берём A[r], если бинпоиском находим его в B, увеличиваем соответствующий элемент в C;
пока у нас последовательность на отрезке [l; r] "хорошая", релаксируем размер последовательности, уменьшаем что надо в C, l++;
итого асимптотика 2*N*M*log(N) (два прохода по A, проверка на "хорошесть", бинпоиск).

вроде ничего не забыл :-)
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306222
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dubov1994,

Да что ты. Злюсь я падругому
аж искры летят.
Чтож спасибо. Чесно нихрена
не врубил. Надо поспать.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306273
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первоначальную последовательность A пропарсить
оставив только те, которые есть в B, и выбросив двойные, которые подряд
каждому оставшему числу прописать в характеристиках количество выброшенных, а также первую и последнюю позицию текущего числа в оригинальной A.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306274
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxпервоначальную последовательность A пропарсить
оставив только те, которые есть в B, и выбросив двойные, которые подряд
каждому оставшему числу прописать в характеристиках количество выброшенных, а также первую и последнюю позицию текущего числа в оригинальной A.хотя для случая
a = (2,5,2,5,2,5,2,5,2,3)
b=(2,5,3)
это ни хрена не поможет
:)
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306437
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все-таки допилил я свое корявое решение
ну такой я уж человек. Не могу без показухи.

Код: plaintext
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.
 public static int GetPositionLeastSequence(int[] A, int[] B)
        {
            int[] check = new int[B.Length];

            int countChecked = 0;
            
            int length = A.Length;
            int position = 0;

            for (int i = 0; i < A.Length; i++)
            {
                for (int j = 0; j < B.Length; j++)
                {
                    if (A[i] == B[j])
                    {
                        if(A[check[j]] != A[i] || i == 0)
                        countChecked++;

                        check[j] = i;

                        if (countChecked >= B.Length)
                        {
                            if (check[j] - check.Min() < length)
                            {
                                position = check.Min();
                                length = check[j] - check.Min();
                            }
                        }
                    }
                }
            }

           return position;

        }
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306463
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если предположить что атомы в списке - это chars то можно
искать группы через Patterns.

Код: plaintext
1.
2.
3.
String A="1,2,3,4,5,3,2,4,8,5";
String B="5,2,3".replaceAll(",","");
Pattern pattern1=Pattern.compile(...+B+....);
....
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306589
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот те на,

вы вообще запускали свою программу на различных тестах? ><
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306599
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

увы, перестановки через регулярки эффективно никак не задать.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306604
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dubov1994,

И так и сяк вертел.
В чем проблема?
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306613
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, из каких условий вообще-то исходим?
А если B будет содержать несколько одинаковых значений?
А насколько вообще могут быть велики используемые значения?
Это я к тому, что нарисовался у меня некий алгоритм, но хочется уточнить...
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306614
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моей постановке не должно быть перестановок. Есть поиск
подстрок состоящих из заданного множества символов.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306615
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот те на,

хотя бы в том, что у вас countchecked никогда не обнуляется. да и в целом алгоритм неверен.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306619
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

а, вот думал же в 5 утра, что что-то забыл :-) одинаковые быстро фиксятся в моём алгоритме.
вообще, конечно, без ограничений ничего не сделать.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306620
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dubov1994,

Он и не должен обнуляться.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306623
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот те на,

короче, найдите контрпримеры сами.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306651
xaoc2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

AndreTM,
Список B не содержит повторяющихся значений
Используемые значения могут быть очень велики
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306655
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот веселые картинки к алгоритму.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306664
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
let a = [ 1 ; 2 ; 3 ; 4 ; 5 ; 3 ; 2 ; 4 ; 8 ; 5 ]
let b = [ 5 ; 2 ; 3 ]

let windowed = seq {
                    for i in b.Length .. a.Length do
                        yield! 
                            Seq.zip (Seq.windowed i a)
                                    [ 0 ..(a.Length-i)]
                   }
let pred (els, i) =
    b |> Seq.forall
            (fun x -> Seq.exists 
                        (fun el -> el = x)
                        els)

let result = 
    let (_, idx) = Seq.find pred windowed
    idx

обработку ситуации когда ответа нет, не делал
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306676
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xaoc2Используемые значения могут быть очень велики
Вот и вопрос - насколько велики? Вернее, разрядность значений какова?
Просто возникла мысль вместо перебора эначений множества B использовать, например, решето.
Скажем, при целых значениях, - гига оперативки хватит на числа (порядка) до 8 млрд.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306708
dubov1994
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

а чем бинпоиск плох? :)
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306760
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dubov1994,

Слушай а как ты определяешь верен
алгоритм или нет. Может научишь? :)
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306768
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот те наdubov1994,

Слушай а как ты определяешь верен
алгоритм или нет. Может научишь? :)
Это фундаментальная проблема. Над ней (ИМХО) еще Гёдель ломал моск.
Нет тестов которые-бы показали что алгорим верен в общем случае.
Но есть возможность указать частные случаи, когда алгоритм не работает
(прогнать десяток модульных тестов). Забавно но сколько-бы тестов
не прогоняли всё равно нет доказательства что в алгоритме нет ошибок.
Или правильнее сказать что так тестируют только уж очень простые
алгоритмы. Яркий пример сложных алгоритмов - это современное ПО.
Опрационки, драйверы, прочий софт. В них изначально заложены
ошибки. Часть из них - детектируют. Часть остаётся навсегда
неизвестными.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306808
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот те наdubov1994,

Слушай а как ты определяешь верен
алгоритм или нет. Может научишь? :)

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

вот в правильности логики приведенного мной решения я почти уверен, разве что где сделал опечатку. ну и не рассмотрен случай когда такой последовательности нет.
а уверен, потому, что решение простое.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306814
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,

Это эф шарп?
Эх никак не могу я сойти
с иглы си шарпов - ломка. :(
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306818
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот те наZyK_BotaN,

Это эф шарп?
Эх никак не могу я сойти
с иглы си шарпов - ломка. :(
можно подобный код и на С# написать.
для этого нужно заюзать линк.

вот книга хорошая,
учит ФП, не отходя от С-Шарпа, а если быть точнее, там идут примеры паралельно
и на С-Шарпе и на Эф-Шарпе
http://www.manning.com/petricek/
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306820
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот те на,

суть кода прокомментировать нужно? или и так все понятно?
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306822
Фотография Вот те на
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNВот те на,

суть кода прокомментировать нужно? или и так все понятно?

Не надо разберемся.
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37306823
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот те наZyK_BotaNВот те на,

суть кода прокомментировать нужно? или и так все понятно?

Не надо разберемся.

мужик ))
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37307048
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всё-таки сделал прогу с учётом всех условий, но стесняюсь выкладывать.
Ибо тестил на VB прямо в офисе (ну нету у меня на офисном компе C-компилятора )
Код, конечно, не оптимизирован вообще. Но это дело недолгое...
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37307053
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMЯ всё-таки сделал прогу с учётом всех условий, но стесняюсь выкладывать.
Ибо тестил на VB прямо в офисе (ну нету у меня на офисном компе C-компилятора )
Код, конечно, не оптимизирован вообще. Но это дело недолгое...

а что порочного в вб? выкладывай исходники на форум ))
...
Рейтинг: 0 / 0
Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
    #37310640
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот табличка и исходники на VBA. Варианты с минимизацией затрат по памяти или по кличеству операций в инварианте.
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Найти позицию кратчайшей последовательность в списке A в котором встречаются все значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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