Как заставить вложенные циклы for в Vb.net работать быстрее на мощном компьютере?

Я пытался закодировать 6-7 вложенных циклов for с помощью Vb.net и попытался скомпилировать его на компьютере i9-9900 с 32 ГБ памяти, но время выполнения занимает слишком много времени! Я запустил диспетчер задач и понял, что приложение использует только 10% процессора и меньше 20 мб памяти! так есть ли способ ускорить цикл for, используя больше мощности процессора?

вот пример того, что я кодировал:

Dim maxNo As Integer
maxNo = 200

For i = 0 To maxNo
 For k = i To maxNo
  For j = k To maxNo
   For l = j To maxNo
    For m = l To maxNo
     For n = m To maxNo
      For q = n To maxNo
          '......
      Next q
     Next n
    Next m
   Next l
  Next j
 Next k
Next i

Заранее спасибо, Программист

попробовал код на высокой спецификации. компьютер, но для завершения циклов по-прежнему требуется слишком много времени. Я хочу воспользоваться мощным ПК, чтобы быстрее запускать код.

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

Hursey 10.04.2023 21:01

Ваш расчет имеет порядок N ^ 7, поэтому он будет быстро увеличиваться с увеличением N. Это примерно порядок высокоточных симуляций квантовой механики, так что, возможно, есть несколько примеров из этой области способов справиться с этим, но в основном я думают, что их стратегии включают огромные вычислительные ресурсы и ограниченное N (или переход к другим алгоритмам более низкого порядка, чем N^7).

Craig 10.04.2023 21:08

Если вы можете сделать что-нибудь, чтобы убрать циклы, я настоятельно рекомендую вам это сделать.

Craig 10.04.2023 21:08

Если вы считаете, что ваше текущее дело имеет управляемое значение N и должно лучше соответствовать имеющимся у вас ресурсам, то правильно будет профилировать его и искать возможности для устранения узких мест. В частности, следует обратить внимание на несколько моментов: возможности пакетного доступа к базе данных или файлам, а также проблемы несоответствия шаблонов доступа и оптимальных шаблонов доступа к структурам данных.

Craig 10.04.2023 21:12

Спасибо за ваши комментарии, мой код должен принимать 7 разных строк в массиве 2d и вычислять среднее значение для каждого столбца из 7 строк. поэтому эти 7 циклов необходимы для генерации всех возможностей 7 строк в массиве. например 1234567, 1345678, 1456789..и т.д. Я также добавил условие, гарантирующее, что последовательность не будет дублироваться.

The Programmer 2023 10.04.2023 21:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

просто дело в том, что ваш код будет однопоточным, и ваш код показывает тип проблемы n ^ n.

Прошло некоторое время с тех пор, как я делал комбинации и перестановки (средняя школа). Но этот код ХУЖЕ, чем n! (факториальная) задача.

С помощью всего лишь моего скромного маленького ноутбука вы можете в расширенной компиляции отключить «удалить проверки целочисленного переполнения» - это ДЕЙСТВИТЕЛЬНО ускорит работу.

Итак, с вашим кодом следующим образом:

    Dim maxNo As Integer
    maxNo = 150

    Dim startTime As DateTime = DateTime.Now
    Dim MyTimeSpan As TimeSpan
    Dim mycount As Long

    For i = 1 To maxNo
        For k = i To maxNo
            For j = k To maxNo
                For l = j To maxNo
                    For m = l To maxNo
                        For n = m To maxNo
                            For q = n To maxNo
                                mycount += 1
                            Next q
                        Next n
                    Next m
                Next l
            Next j
        Next k
    Next i

    MyTimeSpan = DateTime.Now.Subtract(startTime)
    TextBox1.Text = $"Time to run loop = { (MyTimeSpan.TotalMilliseconds) / 1000.0}"
    TextBox2.Text = mycount

ТОЛЬКО значение 150?

Вы собираетесь запустить колоссальные и «поразительные» 389 МИЛЛИАРДОВ (да, это верно МИЛЛИАРД циклов!!).

Я получаю это:

Я также обнаружил, что работа с x86 (форсированный x32-битный проект), по-видимому, работает намного быстрее (нет необходимости заставлять ЦП работать с более крупными x64-битными кодами).

Итак, ваша проблема?

Вы должны рассмотреть меньшую проблему или, возможно, принять какой-то тип параллельной обработки. но даже при таком подходе ваши числа довольно велики, и поэтому вы имеете дело с большими объемами обработки.

Я думаю, вы правы, это огромное количество петель! Я думал, что мощный процессор — это решение, но оказалось, что это не так. Я попробую отключить целочисленную проверку, как вы, и посмотреть, может ли это помочь, если нет, я увижу другой алгоритм для моей проблемы. большое спасибо за ваше время :)

The Programmer 2023 11.04.2023 02:02

Другие вопросы по теме