Наибольшая возрастающая подпоследовательность (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();
}
}
}