Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 19.02.2021
Сообщений: 26
1

Оптимизировать алгоритм перестановки символов

06.03.2021, 15:46. Показов 1142. Ответов 11

Author24 — интернет-сервис помощи студентам
На каждой итерации метода нечетные символы строки объединяются и переносятся в начало, а четные символы переносятся в конец.

имею вот такой алгоритм

C#
1
2
3
4
5
6
7
for (int i = 0; i < count; i++)
            {
                source = string.Concat(source.Where((item, index) => index % 2 == 0)) +
                         string.Concat(source.Where((item, index) => index % 2 != 0));
            }
                
            return source;
но он не проходит тесты на больших count (int.MaxValue)

как его можно оптимизировать чтобы он работал , пытался найти итерацию на которой код будет возвращаться в исходное положение но не получилось.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2021, 15:46
Ответы с готовыми решениями:

Дана строка, состоящая из N попарно различных символов. Вывести все перестановки символов данной строки
Здравствуйте. Дана строка, состоящая из M попарно различных символов. Вывести все перестановки...

Оптимизировать код перебора символов строки
Здравствуйте.Подскажите как можно сжать этот код? public string a1 = new string {&quot;a&quot;,&quot;b&quot;,&quot;с&quot;}; ...

Теория графов. Алгоритм перестановки
Добрый вечер! Столкнулся с проблемой. Не могу понять, как реализовать алгоритм перебора. Задача...

Преобразование строки в байты: оптимизировать алгоритм
Часть программы .... которая строку(довольно большую) содержащую 0 и 1 преобразует в байты( читает...

11
1 / 1 / 0
Регистрация: 19.02.2021
Сообщений: 26
06.03.2021, 16:56  [ТС] 2
На каждой итерации метода нечетные символы строки объединяются и переносятся в начало, а четные символы переносятся в конец.

Имею вот такой алгоритм

C#
1
2
3
4
5
6
7
for (int i = 0; i < count; i++)
            {
                source = string.Concat(source.Where((item, index) => index % 2 == 0)) +
                         string.Concat(source.Where((item, index) => index % 2 != 0));
            }
                
            return source;
но он не проходит тесты на больших count (int.MaxValue)

Как его можно оптимизировать чтобы он работал , пытался найти итерацию на которой код будет возвращаться в исходное положение но не получилось.
0
2638 / 1566 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
06.03.2021, 17:41 3
Мне кажется здесь проблема не в count (int.MaxValue), а в том, что вы выполняете весь цикл и возвращаете результат. А вам нужно на каждой итерации сравнивать получившуюся строку с оригинальной.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string originalSource = $"Как его можно оптимизировать чтобы он работал , пытался найти итерацию на которой код будет возвращаться в исходное положение но не получилось.";
 
string tempSource = originalSource;
 
 
for (int i = 0; ; i++)
{
    tempSource = string.Concat(tempSource.Where((item, index) => index % 2 == 0)) +
                string.Concat(tempSource.Where((item, index) => index % 2 != 0));
 
    //Console.WriteLine(tempSource);
 
    if (tempSource == originalSource)
    {
        Console.WriteLine($"Исходный текст получился на итерации {i+1}"); // 60
        break;
    }
}
0
8942 / 4854 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
06.03.2021, 18:04 4
А зачем цикл?
0
958 / 576 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
06.03.2021, 18:08 5
ze13boba, работайте с массивом(char[])
0
Модератор
Эксперт .NET
15789 / 10946 / 2843
Регистрация: 21.04.2018
Сообщений: 32,109
Записей в блоге: 2
06.03.2021, 18:13 6
Цитата Сообщение от ze13boba Посмотреть сообщение
На каждой итерации метода нечетные символы строки объединяются...
По условиям должна ли на каждой итерации создаваться результирующая строка?
Создание новых больших строк - это очень ресурсоёмко.
0
1 / 1 / 0
Регистрация: 19.02.2021
Сообщений: 26
06.03.2021, 18:32  [ТС] 7
Уточню условие

В метод передаются:
sourse - исходная строка
count - количество итераций которое нужно проделать сам алгоритм.

На каждой итерации метода нечетные символы строки объединяются и переносятся в начало, а четные символы переносятся в конец.

И проблема заключается в том что когда count количество перестроений очень большое - тесты не пройдут по времени выполнения.

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
По условиям должна ли на каждой итерации создаваться результирующая строка?
Создание новых больших строк - это очень ресурсоёмко.
Нет мне нужно вернуть конечную строку.

Вот так выглядит мой код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static string ShuffleChars(string source, int count)
        {
            if (string.IsNullOrWhiteSpace(source))
            {
                throw new ArgumentException("Source string is null or empty or white spaces", nameof(source));
            }
 
            if (count < 0)
            {
                throw new ArgumentException("Count of iterations less than 0", nameof(count));
            }
 
            for (int i = 0; i < count; i++)
            {
                source = string.Concat(source.Where((item, index) => index % 2 == 0)) +
                    string.Concat(source.Where((item, index) => index % 2 != 0));
            }
 
            return source;
        }
0
1 / 1 / 0
Регистрация: 19.02.2021
Сообщений: 26
06.03.2021, 18:36  [ТС] 8
Мне нужно получить строку получившуюся после count итерации и вернуть её , просто если знать как часто исходная строка повторяется то можно не выполнять все 2,147,483,647 итераций.
0
958 / 576 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
06.03.2021, 19:01 9
ze13boba, мы вас тоже в ЕРАМ устраиваем?
Здесь решение вашей задачи - Shuffle Characters
Но судя по всему предыдущий не прошел собеседование....
1
Модератор
Эксперт .NET
15789 / 10946 / 2843
Регистрация: 21.04.2018
Сообщений: 32,109
Записей в блоге: 2
06.03.2021, 19:19 10
Цитата Сообщение от ze13boba Посмотреть сообщение
Нет мне нужно вернуть конечную строку
Проверьте такой вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private static string Method(this string sourse, int count)
        {
            IEnumerable<char> result = sourse;
            for (int i = 0; i < count; i++)
                result = getEven(result, true).Concat(getEven(result, false));
 
            return string.Concat(result);
 
            IEnumerable<char> getEven(IEnumerable<char> _source, bool isEven)
            {
                foreach (var item in _source)
                {
                    if (isEven)
                        yield return item;
                    isEven = !isEven;
                }
            }
        }
Добавлено через 1 минуту
Цитата Сообщение от JustinTime Посмотреть сообщение
Здесь решение вашей задачи - Shuffle Characters
Блин!
Помнил, что была такая задача.
Искал эту тему - не смог найти.
0
958 / 576 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
06.03.2021, 19:23 11
Элд Хасп,если мне память не изменяет, вы даже задавали вопрос математикам по поводу аналитического решения
0
Модератор
Эксперт .NET
15789 / 10946 / 2843
Регистрация: 21.04.2018
Сообщений: 32,109
Записей в блоге: 2
06.03.2021, 19:29 12
Цитата Сообщение от JustinTime Посмотреть сообщение
вы даже задавали вопрос математикам по поводу аналитического решения
Да.
Но вот найти эту тему сам не смог.
0
06.03.2021, 19:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2021, 19:29
Помогаю со студенческими работами здесь

Реализовать алгоритм перестановки столбцов в матрице
Подскажите, как реализовать алгоритм перестановки столбцов в матрице ? Все возможные варианты.

Оптимизировать задачу на перестановки
На столе лежит стопка из N книг, условно пронумерованных сверху вниз от 1 до N. Некто решил...

Дана строка, состоящая из М символов. Вывести все перестановки символов данной строки
Помогите пожалуйста с решением задачи. (Pascal) Дана строка, состоящая из М символов. Вывести все...

Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.
Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной...

Дана строка, состоящая из N попарно различных символов. Требуется вывести все перестановки символов данной строки в алфавитном порядке.
Дана строка, состоящая из N попарно различных символов. Требуется вывести все перестановки символов...

Дана строка, состоящая из N попарно различных символов. Требуется вывести все перестановки символов данной строки в алфавитном порядке
Дана строка, состоящая из N попарно различных символов. Требуется вывести все перестановки символов...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru