Наибольшая возрастающая подпоследовательность (LIS) - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Я не сильно разбираюсь в шарпе(совсем) и при выполнении одного задания возникли некоторые трудности. Само задание: Пусть задана строка X из заглавных букв латинского алфавита. Требуется найти самую длинную монотонно возрастающую подпоследовательность строки X. Сразу вопрос: Делать через массив?(каждая заглавная буква-отдельный элемент массива) Как лучше это реализовать?(предыдущий вопрос) Что не так с самим алгоритмом?(код ниже) Пыталась сделать с числами,а не с буквами.
 static void Main(string[] args)
        {
 
            var P = new int[9];
            var M = new int[10]; 
            var X = new int[9]; 
            int   low, high,middle;
            var random = new Random();
            FillMassiveRandomly(P, random);    
            WriteMassive(P);
            Array.Copy(P, M, 9);
            WriteMassive(M);
            int MAXimal = 0;
            int NewMAXimal;
            for (int i = 0; i < 8; ++i)
            {
                low = 1;
                high = MAXimal;
                while (low <= high)
                {
                    middle = (low + high) / 2;
                    if (X[M[middle]] < X[i])
                        low = middle + 1;
                    else
                        high = middle - 1;
                }
                NewMAXimal = low;
                P[i] = M[NewMAXimal - 1];
                M[NewMAXimal] = i;
                if (NewMAXimal > MAXimal)
                    MAXimal = NewMAXimal;
            }
            var S = new int[MAXimal];
            int k = M[MAXimal];
            for (int i = MAXimal - 1; i > 0; ++i)
            {
                S[i] = X[k];
                k = P[k];
            } 
            for (int i = 0; i < 9; i++)
            {
                Console.Write(S[i]);
            }
            //return S;     
            Console.ReadLine();
        }

Решение задачи: «Наибольшая возрастающая подпоследовательность (LIS)»

textual
Листинг программы
using System;
using System.Collections;
 
namespace Massiv_test
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = new int[10];
 
            Random random = new Random();
            for (int i = 0; i < array.Length; i++)
                array[i] = random.Next(0, 20);
 
            Print(array);
 
            int count = 1,
              currentCount = 1;
            for (int i = 0; i < array.Length - 1; i++)
            {
                if (array[i + 1] > array[i])
                    currentCount++;
                else
                {
                    if (count < currentCount)
                        count = currentCount;
                    currentCount = 1;
                }
            }
 
            Console.WriteLine("count = {0}", count);
            Console.ReadLine();
        }
 
 
        public static void Print(int[] array)
        {
            Console.WriteLine();
            for (int i = 0; i < array.Length; i++)
                Console.Write("{0} ",array[i]);
            Console.WriteLine();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы