Вопросы с тегами [divide]

1

голосов
0

ответ
36

Просмотры

Поиск (Small-Big-Medium) подпоследовательности

Учитывая список п не повторяющиеся целые числа L: = (x1, ..., хп) разработать алгоритм, который решает, если есть xi1, xi2, xi3 в L такого, что i1 ниже i2, i2 ниже, чем i_3, xi1 ниже xi3 и xi3 ниже xi2. Только да-нет ответа не требуется. В заявлении также предлагается использовать стратегию «разделяй и властвуй». Моя попытка была следующая: я прочитал вектор слева направо Если список меняется от увеличения к уменьшению, то ясно, что число последнего чтения ниже максимума чтения текущего списка. Так что, если она больше, чем минимум текущего списка, мы можем остановиться. Если список изменяется от снижения к росту, то я смотрю на первое число м в списке, который является локальным минимумом и ниже последнего считывания числа с. А потом я смотрю на локальный максимум появляющегося после м, которая больше, чем с. Если список продолжает расти, мы делаем то же самое, как и в предыдущем шаге. Если список продолжает убывающий ничего не делать. Таким образом, сложность NlogN. Я думаю, что стратегия хороша, но онлайн судья отклонил его. Я не знаю, если это происходит из-за глупой ошибки или потому, что стратегия действительно неправильно. # include # include # include используя патезрасе; BOOL solveCase (); BOOL increasingCase (карта & мин, карта & Maxs, пара & lastMaxInserted, Const INT & ток); аннулированию ignoreStuff (); INT основных () {в то время как (solveCase ()); возвращать 0; } BOOL solveCase () {/ * --- Чтение числа детей --- * / Int N; если (зсапЕ ( "% d", & N) == EOF) {вернуться ложным; } / * --- Используемые переменные --- * / INT globalMax; INT globalMin; карта Maxs; карта мин; INT localMin; Int localMinPos; BOOL возрастает; пара lastMaxInserted; ИНТ старый; ИНТ тока; / * ----- Чтение первых двух детей ----- * / / * - Чтение первых детей - * / Scanf ( "% d", & старые); globalMax = старый; globalMin = старый; / * - Чтение второго ребенка - * / зсапЕ ( "% d", ¤t); если (ток> старый) {/ * Последовательность начинает увеличиваться * / увеличение = TRUE; globalMax = ток; localMin = старый; localMinPos = 0; } Еще {/ * Последовательность начинает уменьшаться * / увеличение = ложь; globalMin = ток; lastMaxInserted = maxs.insert (пара (старый, 0)); } Старый = ток; / * ----- Чтение остальное ----- * / для (INT I = 2; я <N; я ++) {зсапЕ ( "% d", ¤t); / * Чтение ребенок * / если (увеличение) {/ * - Последовательность уменьшалась - * / если (текущий <старый) {/ * Последовательность держит уменьшается * / globalMin = мин (ток, globalMin); } Еще {/ * Монотонность изменения * / localMin = старый; localMinPos = я - 1; если (increasingCase (мин, Maxs, lastMaxInserted, ток)) {Е ( "ELEGIR OTRA \ п"); ignoreStuff (); / * Не обращая внимания на остальное * / возвращение правда; } Увеличение = TRUE; }} Еще {/ * - Последовательность увеличивалась - * / если (текущий> старый) {/ * Последовательность продолжает увеличиваться * / globalMax = макс (ток, globalMax); если (increasingCase (мин, Maxs, lastMaxInserted, тока)) {Е ( "ELEGIR OTRA \ п"); ignoreStuff (); / * Не обращая внимания на остальное * / возвращение правда; }} Еще {/ * Монотонность изменения * / если (текущий> globalMin) {/ * Проверьте, если мы можем положить конец * / Е ( "ELEGIR OTRA \ п"); ignoreStuff (); / * Не обращая внимания на остальное * / возвращение правда; } Еще {globalMin = ток; / * Установка локального минимума (сохраненное где-то) * / карта :: итератор Miniter; Miniter = mins.lower_bound (localMin); если (! mins.empty () && Miniter! = мин. начинают ()) {/ * Значение представляет собой минимальное положение локальных минимумов * ниже текущего локального минимума * / minIter--; mins.insert (пара (localMin, minIter-> второй)); } Еще {mins.insert (пара (localMin, localMinPos)); } / * Установка локального максимума (старый) * / / * Значение является максимальным положением локальных максимумов * больше или равно, чем текущий * локальный максимум (т.е. положения локального максимума *). Местные максимумы ниже, чем * максимум тока имеют несвязные значения, но * не имеет значения ... * / LastMaxInserted = maxs.insert (пара (старый, я - 1)); увеличение = ложь; }}} Старый = ток; } Е ( "SIEMPRE PREMIO \ п"); возвращает истину; } BOOL increasingCase (карта & мин, карта & Maxs, пара и lastMaxInserted, Const INT & ток) {если {/ * (mins.empty (!)) - Получение позиции первого локального минимума ниже тока - * / карта :: итератор Miniter; Miniter = mins.lower_bound (ток); если {minIter-- (Miniter = mins.begin (!)); } Еще {вернуться ложным; } INT MINPOS = minIter-> второй; / * - Попытка получить хороший локальный максимум приходя после минимума - * / если {карта :: итератор MaxIter (maxs.empty (!)); MaxIter = maxs.upper_bound (ток); если (MaxIter = maxs.end (!)) {если (maxIter-> первая <lastMaxInserted.first-> первая) {если (MINPOS> lastMaxInserted.first-> второй) {вернуться ложным; }} Еще {если (MINPOS> maxIter-> второй) {вернуться ложным; }}} Еще {вернуться ложным; }} Еще {вернуться ложным; }} Еще {вернуться ложным; } Возвращает истину; } Недействительного ignoreStuff () {символ мусор = GetChar (); в то время как (мусор = '\ п') {трэш = GetChar (); } } Любая идея? конец ()) {если (maxIter-> первая <lastMaxInserted.first-> первая) {если (MINPOS> lastMaxInserted.first-> второй) {вернуться ложным; }} Еще {если (MINPOS> maxIter-> второй) {вернуться ложным; }}} Еще {вернуться ложным; }} Еще {вернуться ложным; }} Еще {вернуться ложным; } Возвращает истину; } Недействительного ignoreStuff () {символ мусор = GetChar (); в то время как (мусор = '\ п') {трэш = GetChar (); } } Любая идея? конец ()) {если (maxIter-> первая <lastMaxInserted.first-> первая) {если (MINPOS> lastMaxInserted.first-> второй) {вернуться ложным; }} Еще {если (MINPOS> maxIter-> второй) {вернуться ложным; }}} Еще {вернуться ложным; }} Еще {вернуться ложным; }} Еще {вернуться ложным; } Возвращает истину; } Недействительного ignoreStuff () {символ мусор = GetChar (); в то время как (мусор = '\ п') {трэш = GetChar (); } } Любая идея? второй) {вернуться ложным; }} Еще {если (MINPOS> maxIter-> второй) {вернуться ложным; }}} Еще {вернуться ложным; }} Еще {вернуться ложным; }} Еще {вернуться ложным; } Возвращает истину; } Недействительного ignoreStuff () {символ мусор = GetChar (); в то время как (мусор = '\ п') {трэш = GetChar (); } } Любая идея? второй) {вернуться ложным; }} Еще {если (MINPOS> maxIter-> второй) {вернуться ложным; }}} Еще {вернуться ложным; }} Еще {вернуться ложным; }} Еще {вернуться ложным; } Возвращает истину; } Недействительного ignoreStuff () {символ мусор = GetChar (); в то время как (мусор = '\ п') {трэш = GetChar (); } } Любая идея? }} Еще {вернуться ложным; } Возвращает истину; } Недействительного ignoreStuff () {символ мусор = GetChar (); в то время как (мусор = '\ п') {трэш = GetChar (); } } Любая идея? }} Еще {вернуться ложным; } Возвращает истину; } Недействительного ignoreStuff () {символ мусор = GetChar (); в то время как (мусор = '\ п') {трэш = GetChar (); } } Любая идея?
1

голосов
0

ответ
74

Просмотры

Нахождение индекса ограничивает для рекурсивного подпоследовательности

У меня есть быстрый вопрос о максимальной подпоследовательности алгоритма, который использует разделяй и властвуй как показано ниже: частный статический INT maxSum3Recursive (ИНТ [] а, ИНТ слева, внутр справа) {если (слева == справа) {если (а [влево]> 0) {возвращают [влево]; } Еще {возвращают 0; }} = INT центр (левый + правый) / 2; INT maxLeftSum = maxSum3Recursive (а, слева, в центре); INT maxRightSum = maxSum3Recursive (а, центр + 1, справа); INT maxLeftBorderSum = 0; INT leftBorderSum = 0; для (INT I = центр; я> = слева; i--) {leftBorderSum + = а [I]; если (leftBorderSum> maxLeftBorderSum) {maxLeftBorderSum = leftBorderSum; }} INT maxRightBorderSum = 0; INT rightBorderSum = 0; для (INT I = центр + 1; я maxRightBorderSum) {maxRightBorderSum = rightBorderSum; }} Вернуть Math.max (maxLeftSum, Math.max (maxRightSum, maxLeftBorderSum + maxRightBorderSum)); } Алгоритм работает как ожидалось, и дает мне максимальную сумму, однако, у меня возникают проблемы с поиском начала и конца индекса за границы для максимума. Например, предположим, что у нас есть массив: {5, -5, 2, 9}. Сумма будет 2 + 9 = 11 и индекс будет [2 - 3], так как сумма должна быть последовательными. Другими словами, мы не можем просто использовать 5 и 9, чтобы сделать 14, потому что они не находятся рядом друг с другом. Я был бы признателен за любую помощь, выясняя индексы. } Алгоритм работает как ожидалось, и дает мне максимальную сумму, однако, у меня возникают проблемы с поиском начала и конца индекса за границы для максимума. Например, предположим, что у нас есть массив: {5, -5, 2, 9}. Сумма будет 2 + 9 = 11 и индекс будет [2 - 3], так как сумма должна быть последовательными. Другими словами, мы не можем просто использовать 5 и 9, чтобы сделать 14, потому что они не находятся рядом друг с другом. Я был бы признателен за любую помощь, выясняя индексы. } Алгоритм работает как ожидалось, и дает мне максимальную сумму, однако, у меня возникают проблемы с поиском начала и конца индекса за границы для максимума. Например, предположим, что у нас есть массив: {5, -5, 2, 9}. Сумма будет 2 + 9 = 11 и индекс будет [2 - 3], так как сумма должна быть последовательными. Другими словами, мы не можем просто использовать 5 и 9, чтобы сделать 14, потому что они не находятся рядом друг с другом. Я был бы признателен за любую помощь, выясняя индексы.
Cyberboy1551
1

голосов
0

ответ
23

Просмотры

Div обновления .load () метод .. не найден

У меня проблема с Div освежения. ИДК, где мой problme. и его говорит, что проблема не найден: /chat/(?P5\d+)/(?Pchatsnr1[\w-]+)/chat.html И это мой код для него {% статическая нагрузка%} {% заголовка блока %} kobby чат {% концевой блок%} {% включает 'чат / navbar.html' %} {% содержание блока%} {%}% концевого блок $ (документ) .ready (функция (событие) {$ ( "# текст" ) .emojioneArea ({pickerPosition: "дно"}.) $ ( '# авто') нагрузки ( 'chat.html'); обновить ();}); функция обновления () {SetTimeout (функция () {$ ( '# авто'). Затухание ( 'медленно') нагрузки ( 'chat.html') FadeIn ( 'медленно')..; обновить (); }, 5000); } И следующая часть для этого {% распространяется 'чат / base.html' %} {% титульный блок%} {{post.title}} | {{Block.super}} {% концевой блок%} {% Содержание блока%} {{}} post.title Чат создан Kobby {{post.body}} {% csrf_token%} {%, если request.user.is_authenticated% } {% еще%} {% ENDIF%} {% включают 'чат / chat.html' %} {%}% концевым блоком Тогда finnaly {{}} comments.count чат сообщение {{комментарии |}} образовывать множественное число {% для комментариев в комментариях%} {{comment.content}} {%, если comment.user.is_staff%} на {{комментарий. пользователь | capfirst}} {%}% еще на {{comment.user | capfirst}} {% ENDIF%} {% ENDFOR%} Я думаю, что у меня есть проблемы в адресах как .load () метод я пытался diffrent URLs, но то же самое результат. Может быть, мне нужны некоторые другие methof для освежающего HTML код
KobbyLV
1

голосов
1

ответ
288

Просмотры

Intereseting вилка / Регистрация или Разделяй и властвуй Примеры

Мы хотим, чтобы продемонстрировать новый JDK7 Fork / Join Framework на научно-практической конференции. Для этого мы в настоящее время ищем интересный пример того, что может быть сделано с рамками. Есть очевидные из них, как сортировочных или матричных вычислений, но есть более интересные из них, которые люди хотели бы работать. Например, мы обнаружили размытие изображения на сайте Java или, может быть, прогноз погоды или что-то подобное? Было бы хорошо, если домен не слишком сложен, так что проблемы могут быть решены в то время суток. Любой входной сигнал очень ценится. Любые идеи или опыт?
Fabian
1

голосов
2

ответ
1.1k

Просмотры

РНР алгоритм, который вычисляет все возможные комбинации разделения одного набора между другим набором

Я ищу своего рода 2-мерного алгоритма комбинации .. если это правильная формулировка. Я очень опытный с PHP, но не с алгоритмами и передовой математикой, так терпите меня, пожалуйста. У меня есть набор элементов, которые я хочу объединить с другим набором элементов и рассчитать все возможные комбинации, так что я могу анализировать ее впоследствии. Количество элементов в наборах никогда не меняется, оба набора всегда есть пять элементов: $ SET1 = массив ( «A», «B», «C», «D», «Е»); $ Set2 = массив ( 'One', 'Два', 'Три', 'Четыре', 'Пять'); Не знаю, если это правильное выражение, но я хотел бы видеть все комбинации Set 1 элементов, разделенных между пунктами Сета 2. Три»=> Array ( 'А'), 'Четыре' => Array ( 'В'), 'Пять' => массив ( 'D', 'E'),), 3 => массив ( '= One' > массив (), 'Два' => Array (), 'Три' => Array ( 'А', 'В', 'С', 'D', 'E'), 'Четыре' => Array () 'Пять' => Array (),),); Etc .. те рода ценности. Любой вид обратной связи на этом можно только приветствовать, в частности: Как закодировать что-то вроде этого в PHP? Через рекурсивной функции? Должен ли я использовать декартову алгоритм продукта? Сколько комбинаций возможны? 5 ^ 10? В зависимости от предыдущей точки: Реально ли работать с этими данными в режиме реального времени в веб-приложение? Если у меня есть 10 миллионов комбинаций, чем я предполагаю, что я, вероятно, нужно сделать расчеты заранее, сохранить результаты анализа и работы с этим во время выполнения приложения живого? Есть некоторые ограничения (например: Set «One» 2 шт, «два» и «Три» всегда должны иметь по крайней мере один элемент из набора 1), но бесполезных комбинаций будет отброшен в процессе анализа впоследствии поэтому нет необходимости включать, что в комбинация алгоритм, если он не может уменьшить время вычислений, построив их в в этой точке? Мой вопрос может быть не очень ясно, так что просто спросить, если мне нужно, чтобы обеспечить некоторую более или более полную информацию. Заранее спасибо Обновление 28.02.2012 Я попытался PHP реализаций питания Set & декартовых функций продукта, которые я нашел в Интернете (Такого рода вещи немного за меня, чтобы попытаться закодировать себя). Поэтому, когда я выполняю этот код: $ Powerset = POWERSET (массив ( 'A', 'B', 'C')); $ Декартова = декартово (массив ( 'Set1' => $ Powerset, 'Set2' => Array ( 'One', 'Два', 'Три'))); Это то, что функция POWERSET ставит в $ Powerset: Array ([0] => Array () [1] => Array ([0] => A) [2] => Array ([0] => В) [ 3] => Array ([0] => B [1] => A) ... И это то, что декартовы функция возвращает: Array ([0] => Array ([Set1] => Array () [Set2 ] => Один) [1] => Array ([Set1] => Array ([0] => А) [Set2] => Один) [2] => Array ([Set1] => Array ([0] => В) [Set2] => Один) [3] => Array ([Set1] => Array ([0] => B [1] => A) [Set2] => One) ... Так что это своего рода делает то, что я хотел, но не самая трудная часть. Рассматривается комбинации «индивидуальны» и не распространяет Set1 в Set2, убедившись, что все Set1 элементов используются на все три SEt2 пунктов. Могу ли я искажая использование этих двух функций? Я полагаю, что это то, что я не правильно понять о том, как объединить силы Set & декартов продукт для достижения моего результата. Должен ли я, возможно, вызвать функцию POWERSET () внутри функции декартовой ()? Может быть, эти конкретные функции PHP не совсем служат своей цели? Я нашел их здесь: комплект Мощность: http://bohuco.net/blog/2008/11/php-arrays-power-set-and-all-permutations/ декартово произведение: Поиск декартово произведение с PHP ассоциативные массивы Еще одно обновление: Подтвердив проблему без ссылки программирования Эта проблема связана с инструментом анализа я создаю для стратегической игры. Каждый раз, когда инструмент привыкает, игроки могут выбрать 5 различных единиц из большой коллекции единиц. Эти устройства могут быть объединены с другим (статическим) сущностеем (давайте называть их «пулы») в различных формах. Блоки имеют характеристики, которые могут или не могут улучшить стратегию игрока, если они сочетаются с некоторыми бассейнами. Например: Единица A любит быть в бассейне 1, но ненавидит быть в бассейне-Unit B ненавидящим быть в бассейне 1, если если блок А не существует, а также и т.д .. Целью инструмента является, чтобы найти лучшие комбинации из которых единицы идут в котором бассейн. Таковы правила: Есть всегда 5 различных единиц, выбранных из коллекции около 50. Всех этих единиц имеют разные характеристики. Есть всегда одни и те же 5 бассейнов. Они имеют различные характеристики, но лужи не выбраны из большого собрания, они всегда одинаковы. Каждый пул может содержать несколько единиц, от 0 до 5. Каждое устройство может находиться только в одном бассейне. Вход: Список 5 переменных блоков: А, В, С, D, список ЕА 5 статических бассейнов: pool1, Pool2, Pool3, Pool4, Pool5 выход должен быть, все возможные комбинации между этими двумя списками, на основе вышеупомянутые правила. Некоторые примеры: Комбинация 1 Бассейн 1: Пул 2: В бассейн 3: С бассейн 4: D бассейн 5: E Комбинация 2 Бассейн 1: А, В, С бассейн 2: D бассейн 3: Е бассейн 4: Пул 5: Комбинация 3 бассейн 1: С 2 бассейн: бассейн 3: бассейн 4: В бассейн 5: D, Е Комбинация 4 бассейн 1: 2 бассейн: бассейн 3: A, B, C, D, E бассейн 4: бассейн 5: и т.д ... Так что я хотел бы сделать: принять все возможные комбинации единиц и бассейнов существуют. Пройдите через них и назначить комбинации с «значение стратегии» на основе взаимодействия между подразделениями и бассейнами. Возьмите 10 лучших комбинаций, которые имеют наивысший «значение стратегии» Шаг 2 и 3 не являются проблемой. Проблема у меня генерирует все возможные комбинации блоков в бассейнах. Надеюсь, что это более четкое описание проблемы Шаг 2 и 3 не являются проблемой. Проблема у меня генерирует все возможные комбинации блоков в бассейнах. Надеюсь, что это более четкое описание проблемы Шаг 2 и 3 не являются проблемой. Проблема у меня генерирует все возможные комбинации блоков в бассейнах. Надеюсь, что это более четкое описание проблемы
Kiluminati
1

голосов
2

ответ
223

Просмотры

Разделяй и властвуй

Узнавал о Разделяй и властвуй, и я изо всех сил, чтобы понять одну концепцию. Если у нас есть отсортированный массив и хотите сделать некоторые задачи .... мы получаем формулу Т (п) = а (п / б) * O (п) И если мы будем использовать Ь = 2 (бинарное дерево), то есть каждый подмассив производится в более двух подрешеток ... мы получаем Т (п) = 2 (п / 2) * O (п) -> и мастер-правило, время работы = O (N * LogN) Теперь, если мы используем б = 3 (три-ни капли дерева), то есть каждый подмассив выполнен в более трех подмассивов мы получаем Т (п) = 3 (п / 3) * О (п) -> что означает, что время работы = О (п * LOGN ) Вопрос: Должно быть время работы больше, если мы делаем больше шпагат? почему я продолжать получать то же самое время работает независимо от того, насколько велика моего дерева?
JohnBlack
1

голосов
1

ответ
1.4k

Просмотры

Тримина программа с использованием графики

У меня есть программа триминой. Однако теперь, когда она должна быть преобразована в графики (которые я оставил для последнего). Я очень путать о том, как это сделать, я знаю, что некоторые основы графики, но глядя на мою программу, кажется, я мог бы сделать много изменений, чтобы сделать его работу. Есть простой способ сделать это? В принципе мне нужно преобразовать trominos, которые у меня есть как номера прямо сейчас на шахматную доску (что размер задается пользователем). И дефицитных квадрат быть любого цвета, что указывает на это место недостающего площади. Вот код: импорт java.util. *; общественный класс тримина {частного ИНТ [] [] сетки; частное ИНТ currentNum; // Предварительное условие: размер должен быть совершенным сила 2 и 0
jSeesFor3ver
1

голосов
1

ответ
57

Просмотры

время работы алгоритма changetoBinary?

Я разработал алгоритм для преобразования силы 10 в двоичном предположении, что п является степенью 2. Я использовал метод Гаусса использовать быстрое время выполнения этого славного метода. Для этого я разделить п над 2 и послать его к методу Gauess следующим образом: changetoBinary (п) при п = 1 обратный двоичный 10, который является 1010 еще вернуть gauess (п / 2, п / 2) Очевидно, что метод Угадай будет первый разрыв, а затем победить и затем объединить. В конце концов, мы имеем число изменилось в двоичную. Теперь мой вопрос о времени работы алгоритма: я понимаю, что так как Guess время работы является Theta (п ^ log3 (base2)) можно сказать, что время работы этого алгоритма является также то же самое, потому что большая часть работы сделана по Guess.
Hamed Minaee
1

голосов
1

ответ
120

Просмотры

Лучший способ избежать деления на ноль, делая математику на геометрических формах

Я кодирование на аппаратном контроллер специализированного движения, который использует подмножество языка Visual Basic в качестве языка программирования. Мне нужно сделать некоторые расчеты по заданным точкам, как получить координаты центра дуги, который проходит через 3 различных точек; смещение линий, получение пересечения координат 2 линии и т.д ... Я использую декартову систему координат для расчетов. Кажется, что код будет разрастаются при обработке деления на ноль случаев. Итак, что является лучшей системой координат для таких расчетов? Или то, что это лучший подход, чтобы сохранить такой код маленькими? Пример кода дает координаты центральной точки дуги, который проходит через 3 точек выглядит следующим образом: «p1: (PX1, PY1) р2: (PX2, ру2) р3: (px3, PY3)» ------- --------------------------------------- m_r = (ру2-PY1) / (px2- px1) ' Наклон линии между P1 и P2 M_T = (PY3-py2) / (px3-PX2) 'наклон линии между П2 и П3 center_x = (m_r * M_T * (PY3-PY1) + m_r * (PX2 + px3) -m_t * (px1 + PX2)) / (2 * (m_r-m_t)) center_y = (- 1 / m_r) * (x_mrk- (px1 + PX2) / 2) + (PY1 + py2) / 2 Как вы можете вижу, есть много случаев, которые вызывают деление на ноль исключения. Должен ли я использовать, если / другое строение или есть способ лучше?
ceremcem
1

голосов
1

ответ
487

Просмотры

Checking duplicates with divide and conquer

To search duplicates in nlogn I decided to use a merge sort modified. The main problem is that an error appear and I don't know how to fix this problem: Results sometimes are completely wrong. My algorithm has to return True if it found a pair( an element with the same value) or False if it has not a pair. All this must be done inside the divide and conquer algorithm.(no extra for loop ecc.) This is the code def check_duplicates(X): if len(X)>1: mid = len(X)//2 lefthalf = X[:mid] righthalf = X[mid:] check_duplicates(lefthalf) check_duplicates(righthalf) i=0 j=0 k=0 while i
BioShock
1

голосов
1

ответ
294

Просмотры

Master Theorem confusion with the three cases

Я знаю, что мы можем применить Master теорему, чтобы найти время выполнения разделяй и властвуй алгоритм, когда рекуррентное соотношение имеет вид: Т (п) = а * Т (п / б) + ф (п) Мы знаем, следующее: а это число подзадач, что алгоритм делит исходная задача Ь размер ВС-задачи, т.е. п / б, и, наконец, .. е (п) включает в себя стоимость деления проблемы и объединения результатов из подзадачи. Теперь мы тогда найти что-то (я вернусь к термину «что-то»), и у нас есть 3 случая, чтобы проверить. Случай, когда F (п) = O (N ^ лог (б)-ε) для некоторого е> 0; Тогда Т (п) О (п * журнала (б) а) Случай, когда F (п) = O (N ^ лог (б)); Тогда Т (п) О (п ^ лог (б) * журнал п). Если п ^ лог (б) а + ε = О (е (п)) для некоторой константы е> 0, и если * е (п / б) = <ср (п) для некоторой постоянной с <1 и почти все п, то Т (п) = О (е (п)). Все хорошо, Я вспоминаю термин что-то. Как мы можем использовать общие примеры (т.е. использует переменные, а не действительные числа), чтобы решить, какой случай алгоритм в? В случае. Рассмотрим следующий: Т (п) = 8Т (п / 2) + п Так а = 8, б = 2 и F (п) = п Как будет происходить тогда? Как я могу решить, какое дело? В то время как функция е (п) = некоторый большой О нотации, как эти две вещи сопоставимы? Выше всего лишь пример, чтобы показать вам, где я не понимаю, так что вопрос в целом. Спасибо Ь = 2 и е (п) = п Как будет происходить тогда? Как я могу решить, какое дело? В то время как функция е (п) = некоторый большой О нотации, как эти две вещи сопоставимы? Выше всего лишь пример, чтобы показать вам, где я не понимаю, так что вопрос в целом. Спасибо Ь = 2 и е (п) = п Как будет происходить тогда? Как я могу решить, какое дело? В то время как функция е (п) = некоторый большой О нотации, как эти две вещи сопоставимы? Выше всего лишь пример, чтобы показать вам, где я не понимаю, так что вопрос в целом. Спасибо
John
1

голосов
1

ответ
327

Просмотры

Мастер теоремы Случай 3 Пример Алгоритмы

Обучаясь теоремой Master у меня возникают проблемы, придумывающую реальный мир алгоритм в качестве примера, чья рецидивы стратегии будет падать в случай 3. Можете ли вы предложить какую-либо ссылку, где я могу прочитать больше о таких алгоритмах?
Ondrej Skopek
1

голосов
2

ответ
45

Просмотры

Выполнение конкретной функции для одного столбца в течение первых 12 строк?

Это очень просто, но по какой-то причине у меня возникают проблемы с ним. У меня есть набор данных, как это: Черта файла Temp Значение Rep PB Смертность 16 52,2 54 PB Смертность 17 21,9 91 PB Смертность 18 15,3 50 ... И это продолжается, как, что для 36 строк. Что мне нужно сделать, это разделить столбец значения на 100 только в первые 12 строк. Я сделал: NewData
CowsGoM00
1

голосов
1

ответ
979

Просмотры

Выявление и ремонт поплавка деление на ноль ошибок (Python)

У меня есть сегмент кода предназначен для использования в сценарии, чтобы найти ошибку в численном интегрировании с использованием правила трапеции подгонки ошибки полинома. Этот сегмент кода бросает поплавка деление на ноль ошибок, и я не вижу, почему и как это исправить. Может кто-нибудь помочь привести меня к ответу? Защита ловушка (е, а, Ь, дй, точный): N = INT (numpy.round (с плавающей точкой (ба) / дй)) = ш (ба) / N сумма = F (а) /2.0 + F (б) /2.0 для я в диапазоне (1, N): сумма + = е (а + г * ш) площадь = сумма * ш = errorf точной области # Если ошибка пересекает 0, полиномиальное приближение # к абсолютному значению будет идти псих. вернуть errorf Этот альтернативный метод выдает тот же ошибка # альтернативный способ обработки дх не является делителем ба четкости alt_trap (F, A, B, дх, точным): N = INT (numpy.floor (с плавающей точкой (ба) / дх)) сумма = F (а) /2.0 + F (а + Н * дх) /2.0 для г в интервале (1, N):
Errata
1

голосов
1

ответ
472

Просмотры

Нахождение локальных максимумов в 2d массив пХп

В 2d массив пХп, я пытаюсь найти число, которое больше, чем его сосед. Я подошел к этому с помощью разделяй и властвуй алгоритм. Затем я попытался доказать правильность моего алгоритма, демонстрируя соответствующий инвариант ИЭ приближалась это путем заполнения 4x4 сетки со случайными числами, разделив его и нахождение глобального максимума для каждого столбца, выбранного (не уверен, что это способ доказать правильность алгоритма) бит Я очень смущен о том, как анализировать время работы для моего алгоритма т.е. сколько элементов в массиве NxN нужно посетить в худшем случае, и, наконец, если есть способ, чтобы показать, если алгоритм является бессимптомно оптимальным.
1

голосов
3

ответ
294

Просмотры

Python - Равномерно разделить числа в списке списков

Как может эффективно, ряд равномерно распределены в группы «N»? Я думал об этой функции, но она не делит полностью равномерно эти цифры. Защиту DivideList (TOTAL_NUM, div_num): DIV = INT (TOTAL_NUM) / Int (div_num), если (div_num <TOTAL_NUM): div_list = [[DIV * I, Разд * (г + 1)] для г в диапазоне (div_num)] div_list [div_num-1] [1] = TOTAL_NUM еще: div_list = [[я, я + 1] для г в диапазоне (TOTAL_NUM)] возвращение div_list печати DivideList (100, 8) Может ли это быть также достигнуто с пониманием списка? EDIT: Пример: DivideList (20, 4) >> [[0, 5], [5, 10], [10, 15], [15, 20]] DivideList (14, 4) >> [[0, 4 ], [4, 8], [8, 11], [11, 14]]
PyCV
1

голосов
1

ответ
425

Просмотры

Карацуба Алгоритм реализован в JavaScript не точным

Я пытаюсь реализовать алгоритм Карацуба в JavaScript. Ниже моя реализация: вар BigInt = требуется ( «биг-целое»); функционировать bigKaratsuba (num1, num2) {если (номер (num1) <10 || Количество (пит2) <10) {возвращение (номер (num1) * Количество (пит2)) ToString (). } Вар len1 = Строка (num1) .length; вар len2 = Строка (пит2) .length; вар т = Math.max (len1, len2); вар м2 = Math.floor (м / 2); вар HIGH1 = Строка (num1) .substring (0, м-м2); вар LOW1 = Строка (num1) .substring (м-м2, len1); вар HIGH2 = Строка (пит2) .substring (0, м-м2); вар Low2 = Строка (пит2) .substring (м-м2, len2); вар HIGH1 = BigInt (Строка (num1) .substring (0, м-м2)); вар LOW1 = BigInt (Строка (num1) .substring (м-м2, len1)); вар HIGH2 = BigInt (Строка (пит2) .substring (0, м-м2)); вар Low2 = BigInt (Строка (пит2) .substring (м-м2, len2)); вар low1AndHigh1 = low1.add (HIGH1). нанизывать(); вар low2AndHigh2 = low2.add (HIGH2) .ToString (); вар HIGH1 = Строка (HIGH1); вар LOW1 = Строка (LOW1); вар HIGH2 = Строка (HIGH2); вар Low2 = Строка (Low2); вар г0 = bigKaratsuba (LOW1, Low2); вар z1 = bigKaratsuba (low1AndHigh1, low2AndHigh2); вар z2 = bigKaratsuba (HIGH1, HIGH2); вар z0_int = BigInt (г0); вар z1_int = BigInt (z1); вар z2_int = BigInt (z2); вар продукта = z2_int.times (Math.pow (10, м2 * 2)). добавить (z1_int.minus (z2_int) .minus (z0_int) & bull; (Math.pow (10, м2))). Добавить (z0_int) ; возвращать строку (продукта); } BigKaratsuba (15, 15); Эта реализация работает отлично для малого значения, однако в то время как я пытаюсь вычислить 3141592653589793238462643383279502884197169399375105820974944592 раз 2718281828459045235360287471352662497757247093699959574966967627, ответ Gose неправильно, что я получил это 8541020071716445382689180042569347598344699394502900911882868254737925119641226981222291225174629534283004908305569988292269254, что не является правильным. Правильный ответ 8539734222673567065463550869546574495034888535765114961879601127067743044893204848617875072216249073013374895871952806582723184, который я получил его отсюда. Я попробовал поиск на StackOverflow, но я не найти решение моей проблемы. Там нет ошибки или что-нибудь, когда я запускаю мой код. Любая помощь или указатель будет высоко оценен. Спасибо заранее для всех людей, находящихся полезными. Правильный ответ 8539734222673567065463550869546574495034888535765114961879601127067743044893204848617875072216249073013374895871952806582723184, который я получил его отсюда. Я попробовал поиск на StackOverflow, но я не найти решение моей проблемы. Там нет ошибки или что-нибудь, когда я запускаю мой код. Любая помощь или указатель будет высоко оценен. Спасибо заранее для всех людей, находящихся полезными. Правильный ответ 8539734222673567065463550869546574495034888535765114961879601127067743044893204848617875072216249073013374895871952806582723184, который я получил его отсюда. Я попробовал поиск на StackOverflow, но я не найти решение моей проблемы. Там нет ошибки или что-нибудь, когда я запускаю мой код. Любая помощь или указатель будет высоко оценен. Спасибо заранее для всех людей, находящихся полезными.
Leonard Ge
1

голосов
1

ответ
100

Просмотры

Divide and Conquer-Returning an array

Я Недавно пройдя через разделяй и властвуй алгоритма. Я в состоянии решить проблемы, если возвращаемое значение предполагает некоторое одно целое число. Пример: 1. Двоичный поиск, здесь мне просто нужно возвращать 1, если найден, иначе -1. Пример: 2. Максимальное число в массиве, просто нужно возвращать единственное число. Но когда дело доходит до возвращения массива, например, когда нам нужен весь массив как выход (Пример: сортировка). Я чувствую, что это трудно. Может кто-нибудь помочь с лучшим подходом? Ниже мой подход для бинарного поиска. #include символ * Разделить (интермедиат обр [], Int л, INT R, Int ключ) {INT т = (L + R) / 2; если (л == г) {если (== ключ обр [м]) возвращение "Найдено"; еще возвращение «не найден»; } Еще {если (== ключ обр [м]) возвращение "Найдено"; иначе, если (ключ> обр [м]) Разделить (обр, т + 1, г, ключ); остальное Разделить (обр, л, м, ключ); }} INT основных () {INT обр [] = {1,2,3,4,5,6,7,8}; Int N = SizeOf (обр) / SizeOf (обр [0]); символ * Результат = Разделить (обр, 0, п-1,10); Е ( "% s \ п", результат); возвращать 0; }
Sandeep Ghemire
1

голосов
1

ответ
1.5k

Просмотры

Деление на ноль произошла ошибка - SQL Server [закрыт]

Я генерации случайных DateTime в таблице SQL Server, используя следующий пример кода Пример кода: DECLARE @SeedInt INT = 0; ВЫБОР DATEADD (минута, (- 1 * (ABS (Контрольная сумма (NewID ())% (случай, когда @SeedInt IS NULL ИЛИ @SeedInt
B.Balamanigandan
1

голосов
1

ответ
500

Просмотры

Нахождение элемента большинства в массиве с использованием C, используя и властвуй

Im писать алгоритм для нахождения большинства элементов в массиве. В принципе, если элемент появляется по меньшей мере, длиной / 2 в массиве, его большинство элемента. В противном случае, массив не имеет большинства элементов. Im не очень хорошо разбираются в C, так что я нашел такое же решение в Python, и попытался преобразовать его. Тем не менее, результаты, которые я получаю есть некоторые необычные ошибки. Мой алгоритм заключается в следующем: #include INT find_majority_element (интермедиат обр [], Int длина); INT основных () {INT обр [] = {12, 3, 1, 1, 3, 4, 2, 2, 9, 6, 2, 1, 2}; INT длина = SizeOf (обр) / SizeOf (INT); INT результат = find_majority_element (обр, длина); если (результат == -1) {Е ( "Отсутствует"); } Еще {Е ( "% d", результат); } Возвращает 0; } INT find_majority_element (интермедиат обр [], Длина целое) {если (длина == 2) {если (обр [0] == обр [1]) {возвращение обр [0]; } Еще {возвращает -1; }} Иначе, если (длина == 1) {возвращение обр [0]; } INT * leftHalf = обр; INT * rightHalf = обр + длина / 2; INT element1 = find_majority_element (leftHalf, длина / 2); INT element2 = find_majority_element (rightHalf, длина / 2); если (element1 == -1 && element2> = 0) {вернуть element2; } Иначе, если (element2 == -1 && element1> = 0) {вернуть element1; } Если (element1 == element2) {вернуть element1; } Еще {возвращает -1; }} Это дает мне неожиданные результаты, что странно, учитывая тот факт, что я просто превращал другой алгоритм. Алгоритм вопроса можно найти здесь: Link Любой помощь? Благодарю.
darkhorse
1

голосов
1

ответ
107

Просмотры

я использовал NULLIF и получил SQL разделить на ноль

выберите код филиала, Артикул, ColorCode, ToplamStok, ToplamSatis, (случай, когда ToplamSatis = 0 ТОГДА ISNULL (ToplamStok / NULLIF (ToplamSatis, 0,1) * 7,0) ELSE (ToplamStok / ToplamSatis) * 7 конец), как SDH в #SatisStokSDH от # SatisStok для этого запроса, я получаю эту ошибку: Деление на ноль произошла ошибка. Почему я получаю это, я уже использовал IsNull функцию? Заранее спасибо.
garbage00
1

голосов
1

ответ
50

Просмотры

Деление на 0 в функции отображения

Я задаюсь вопросом, как обращаться деление на 0 ошибок внутри функции карты (в Python 2.7). Без использования карты, я получаю Защиту my_func (а, б): возвращать / ба = pandas.DataFrame ([1, 1]) б = pandas.DataFrame ([1, 0]) my_func (а, б) Out [] : 0 0 1.000000 1 инф но я получить другой результат при использовании карты: карта (my_func, а, б) Выход []: Файл "", строка 3, в обратном FUNC A / B ZeroDivisionError: целочисленное делении или по модулю нуля Как я могу справиться с этой ошибкой?
RomB
1

голосов
1

ответ
145

Просмотры

Объединение K упорядоченные массивы - очереди приоритета против Традиционные Merge сортировки сливаются, когда использовать какой?

Если предположить, что мы дали K отсортирован массивы (каждый из размера п), в этом случае с помощью приоритета кучи лучше, чем традиционные слияния (по аналогии с той, которая используется в слияния-рода), и наоборот? Приоритет очереди Подход: При таком подходе мы имеем мин кучу размера к (первоначально, первый элемент из каждого из массивов добавляется к куче). Теперь мы удалить элемент мин (от одного из входных массивов), поместить это в конечном массиве, и вставить новый элемент из того же входного массива. Этот подход требует O (кп войти к) времени и O (Kn) пространство. Примечание: Это занимает O (Kn) пространство, потому что это размер конечного массива, и это доминирует размер кучи при вычислении асимптотического пространства сложности. Традиционные Объединить: При таком подходе мы сливаемся первые 2 массивов, чтобы получить отсортированный массив размера 2n. Мы повторяем это для всех входных массивов и после первого прохода, мы получим к / 2, упорядоченные массивы каждый из размера 2n. Мы повторяем этот процесс, пока мы не получим окончательный массив. Каждый проход с тех пор один элемент будет добавлен в соответствующий выходной массив после каждого сравнения времени сложность O (кН). И у нас есть журнал K-пассы. Таким образом, общая сложность времени O (кп войти к). А так как мы можем удалить входные массивы после каждого прохода, то пространство, используемое в любой точке O (кп). Как мы можем видеть, асимптотическое время и пространство Сложность в точности то же самое в обеих подходах. Так что, когда именно мы предпочитаем один над другим? Я понимаю, что для внешнего вида Очереди подход Приоритет лучше, потому что вам нужно всего лишь O (к) в памяти места, и вы можете читать и писать каждый элемент из и обратно на диск. Но как же эти подходы складывают друг против друга, когда мы имеем достаточно памяти? Мы повторяем этот процесс, пока мы не получим окончательный массив. Каждый проход с тех пор один элемент будет добавлен в соответствующий выходной массив после каждого сравнения времени сложность O (кН). И у нас есть журнал K-пассы. Таким образом, общая сложность времени O (кп войти к). А так как мы можем удалить входные массивы после каждого прохода, то пространство, используемое в любой точке O (кп). Как мы можем видеть, асимптотическое время и пространство Сложность в точности то же самое в обеих подходах. Так что, когда именно мы предпочитаем один над другим? Я понимаю, что для внешнего вида Очереди подход Приоритет лучше, потому что вам нужно всего лишь O (к) в памяти места, и вы можете читать и писать каждый элемент из и обратно на диск. Но как же эти подходы складывают друг против друга, когда мы имеем достаточно памяти? Мы повторяем этот процесс, пока мы не получим окончательный массив. Каждый проход с тех пор один элемент будет добавлен в соответствующий выходной массив после каждого сравнения времени сложность O (кН). И у нас есть журнал K-пассы. Таким образом, общая сложность времени O (кп войти к). А так как мы можем удалить входные массивы после каждого прохода, то пространство, используемое в любой точке O (кп). Как мы можем видеть, асимптотическое время и пространство Сложность в точности то же самое в обеих подходах. Так что, когда именно мы предпочитаем один над другим? Я понимаю, что для внешнего вида Очереди подход Приоритет лучше, потому что вам нужно всего лишь O (к) в памяти места, и вы можете читать и писать каждый элемент из и обратно на диск. Но как же эти подходы складывают друг против друга, когда мы имеем достаточно памяти? Каждый проход с тех пор один элемент будет добавлен в соответствующий выходной массив после каждого сравнения времени сложность O (кН). И у нас есть журнал K-пассы. Таким образом, общая сложность времени O (кп войти к). А так как мы можем удалить входные массивы после каждого прохода, то пространство, используемое в любой точке O (кп). Как мы можем видеть, асимптотическое время и пространство Сложность в точности то же самое в обеих подходах. Так что, когда именно мы предпочитаем один над другим? Я понимаю, что для внешнего вида Очереди подход Приоритет лучше, потому что вам нужно всего лишь O (к) в памяти места, и вы можете читать и писать каждый элемент из и обратно на диск. Но как же эти подходы складывают друг против друга, когда мы имеем достаточно памяти? Каждый проход с тех пор один элемент будет добавлен в соответствующий выходной массив после каждого сравнения времени сложность O (кН). И у нас есть журнал K-пассы. Таким образом, общая сложность времени O (кп войти к). А так как мы можем удалить входные массивы после каждого прохода, то пространство, используемое в любой точке O (кп). Как мы можем видеть, асимптотическое время и пространство Сложность в точности то же самое в обеих подходах. Так что, когда именно мы предпочитаем один над другим? Я понимаю, что для внешнего вида Очереди подход Приоритет лучше, потому что вам нужно всего лишь O (к) в памяти места, и вы можете читать и писать каждый элемент из и обратно на диск. Но как же эти подходы складывают друг против друга, когда мы имеем достаточно памяти? общая сложность времени O (журнал к кп). А так как мы можем удалить входные массивы после каждого прохода, то пространство, используемое в любой точке O (кп). Как мы можем видеть, асимптотическое время и пространство Сложность в точности то же самое в обеих подходах. Так что, когда именно мы предпочитаем один над другим? Я понимаю, что для внешнего вида Очереди подход Приоритет лучше, потому что вам нужно всего лишь O (к) в памяти места, и вы можете читать и писать каждый элемент из и обратно на диск. Но как же эти подходы складывают друг против друга, когда мы имеем достаточно памяти? общая сложность времени O (журнал к кп). А так как мы можем удалить входные массивы после каждого прохода, то пространство, используемое в любой точке O (кп). Как мы можем видеть, асимптотическое время и пространство Сложность в точности то же самое в обеих подходах. Так что, когда именно мы предпочитаем один над другим? Я понимаю, что для внешнего вида Очереди подход Приоритет лучше, потому что вам нужно всего лишь O (к) в памяти места, и вы можете читать и писать каждый элемент из и обратно на диск. Но как же эти подходы складывают друг против друга, когда мы имеем достаточно памяти? когда именно мы предпочитаем один над другим? Я понимаю, что для внешнего вида Очереди подход Приоритет лучше, потому что вам нужно всего лишь O (к) в памяти места, и вы можете читать и писать каждый элемент из и обратно на диск. Но как же эти подходы складывают друг против друга, когда мы имеем достаточно памяти? когда именно мы предпочитаем один над другим? Я понимаю, что для внешнего вида Очереди подход Приоритет лучше, потому что вам нужно всего лишь O (к) в памяти места, и вы можете читать и писать каждый элемент из и обратно на диск. Но как же эти подходы складывают друг против друга, когда мы имеем достаточно памяти?
Marko Cain
1

голосов
1

ответ
0

Просмотры

Highest number in a array by recursive divide and conquer

Мой код должен возвращать наибольшее число в заданном массиве с использованием рекурсивного разделяй и властвуй метод. Для [1,3,2,4,6] я должен вернуться 6. По какой-то причине мой код StackOverflowing в строке 47 Исключение в потоке «основного» java.lang.StackOverflowError в maiordivisaoconquista.DivideAndConquer.Highest (DivideAndConquer.java : 47) общественный класс DivideAndConquer {/ ** * @param арг командной строки аргументы * / общественности статической силы основных (String [] арг) {Сканер з = новый сканер (System.in); Int N = s.nextInt (); Int А [] = новый INT [N]; для (INT I = 0; г <a.length; я ++) {а [I] = s.nextInt (); } Int первый = 0; INT последний = a.length; System.out.println (высший (а, во-первых, в прошлом)); } Открытые статические INT Highest (Int А [], Int первого, внутр последнего) {если (первый == последний) {возвращают [первый]; } Если (последний - первый == 1) {вернуть Math.max (а [первый], а [последняя]); } Еще {INT = средний (первый + последний) / 2; вернуться (Math.max (высший (а, во-первых, в прошлом), Самый высокий (а, средний + 1, последний))); }}}
1

голосов
1

ответ
320

Просмотры

Dividing Scala iterators leads to GCoverhead/JavaHeapSpace problems

Я обработка больших данных с Scala, поэтому память и время является еще более важным компаньоном, чем это обычно для меня. Я пытаюсь увеличить скорость некоторой оценки, разделив начальный итератор [String], полученное getLines на большом исходный файл, чтобы сделать некоторые subevaluation параллельно и объединить результаты. Я делаю это рекурсивно ломтиком инга итератор в двух половинок и ссылаясь на рекурсивную функцию на каждом subiterator. Теперь я задаюсь вопросом, почему я получаю GCoverhead или исключение JavaHeapSpace, хотя «критические» элементы оцениваются только один раз перед стадией рекурсии (для того, чтобы получить размер итератора), но, на мой взгляд, не на этапе рекурсии, потому что ломтик возвращает итератор снова (который является нестрогим реализацией). Далее (уменьшенная! ) Код будет в обязательном порядке применяется на 15г файле ~ перед тем конкатенации подсписки. Я использую .duplicatein каждого шага. Я посмотрел апи, док из .duplicate говорит: «Реализация может выделить временное хранение элементов итерировать одним итератора, но еще не другие.», Но ни один элемент не был еще итерации. Может кто-нибудь дать мне подсказку, что происходит не так там и как решить эту проблему? Спасибо вам большое! типа itType = итератор [String] Защита SRC = io.Source.fromFile (арг (0)) getLines // рекурсивно разделить на блоки одинакового размера в разрыве и завоевывать моду Защиты getSubItsDC. (это: itType, глубина: Int = 4) = {Println ( "Получение длины файла ..") вал TotalSize = src.length Println (TotalSize) Защита Rec (it_rec: itType = это, depth_rec: Int = глубина, размер: Int = TotalSize):
Wayne Jhukie
1

голосов
2

ответ
3.1k

Просмотры

может любая формула первенствует клетки делят свое значение на 1000?

если программно или вручную ввести значение, скажем, 10000, в ячейки Excel, мне нужно автоматически разделить его на 1000 для меня, это может произойти? № 1, я не прошу о формате отображения, я должен серьезно изменить введенное значение. № 2, формула не распространяется на весь лист.
Li Tian Gong
1

голосов
1

ответ
119

Просмотры

Разделение строки в группах два

У меня есть строка Hex, который имеет значение, как 26C726F026C426A1269A26AB26F026CC26E226C726E226CD я задавался вопросом, как разбить его на массив строк, где каждый индекс массива содержит группу 2 из этих символов. Пример: строка (0) = 26, строка (1) = С7, строка (2) = 26, строка (3) = F0, и так далее. Как я могу это сделать?
Bernardo Meurer
1

голосов
1

ответ
3.6k

Просмотры

SQL Server - Разделив один столбец другим в запросе SELECT,

Я ищу, чтобы сделать некоторые недели на недели сравнения в запросе выборки. Базовый код будет выбирать отдельные области в крайнем левом столбце, а затем следующий код: SELECT (случай, когда время> = GETDATE () -7 И ТШЕЗТАМР <GETDATE () ТОГДА ORDER_ID ИНАЧЕ NULL КОНЕЦ) КАК ThisWeek SELECT (случай, когда ТШЕЗТАМР> = GETDATE () -14 и TIMESTAMP <GETDATE () -7 ТОГДА ORDER_ID ELSE NULL END) AS LASTWEEK Я бы очень хотел, чтобы иметь возможность (ThisWeek / LASTWEEK) - 1 (как я бы в Excel) возможно ли это?
finngeraghty
1

голосов
1

ответ
17.9k

Просмотры

Разделяй и властвуй парадигмы и рекурсии в C - Merge пример сортировки

Я не могу понять, как разделяй и властвуй алгоритмы реализованы в С. Под этим я имею в виду, что я понимаю алгоритм, но не понимаю, почему и как это работает, когда написан на C. Какие инструкции выполняются и что определяет порядок их выполнение в следующем примере? Другими словами, почему «инициализация merge_sort», «merge_sort первый», «второй merge_sort» и «слияние» появляются, как они делают? #include INT обр [8] = {1, 2, 3, 4, 5, 6, 7, 8}; INT основных () {INT I; merge_sort (обр, 0, 7); Е ( "отсортированный массив:"); для (я = 0; г <8; я ++) Е ( "% d", обр [я]); возвращать 0; } INT merge_sort (интермедиат обр [], Int низкий, высокий INT) {Е ( "\ nmerge_sort инициализации \ п"); ИНТ середине; если (низкий < высокий) {середина = (низкая + высокая) / 2; // Разделяй и властвуй merge_sort (обр, низкий, средний); Е ( "\ п merge_sort первый \ п"); merge_sort (обр, середина + 1, высокий); Е ( "\ п merge_sort второй \ п"); // Объединить слияния (обры, низкие, средние, высокий); Е ( "\ nmerging \ п"); } Возвращает 0; } INT слияния (интермедиат обр [], Int л, Int м, Int ч) {INT arr1 [10], arr2 [10]; INT n1, n2, I, J, K; n1 = M - L + 1; n2 = Н - м; для (я = 0; г <п1; я ++) arr1 [I] = обр [л + I]; для (J = 0, J <п2; j ++) arr2 [J] = обр [M + J + 1]; arr1 [I] = 9999; arr2 [J] = 9999; I = 0; J = 0; для (к = л; K merge_sort (обр, середина + 1, высокий); Е ( "\ п merge_sort второй \ п"); // Объединить слияния (обры, низкие, средние, высокий); Е ( "\ nmerging \ п"); } Возвращает 0; } INT слияния (интермедиат обр [], Int л, Int м, Int ч) {INT arr1 [10], arr2 [10]; INT n1, n2, I, J, K; n1 = M - L + 1; n2 = Н - м; для (я = 0; г <п1; я ++) arr1 [I] = обр [л + I]; для (J = 0, J <п2; j ++) arr2 [J] = обр [M + J + 1]; arr1 [I] = 9999; arr2 [J] = 9999; I = 0; J = 0; для (к = л; K merge_sort (обр, середина + 1, высокий); Е ( "\ п merge_sort второй \ п"); // Объединить слияния (обры, низкие, средние, высокий); Е ( "\ nmerging \ п"); } Возвращает 0; } INT слияния (интермедиат обр [], Int л, Int м, Int ч) {INT arr1 [10], arr2 [10]; INT n1, n2, I, J, K; n1 = M - L + 1; n2 = Н - м; для (я = 0; г <п1; я ++) arr1 [I] = обр [л + I]; для (J = 0, J <п2; j ++) arr2 [J] = обр [M + J + 1]; arr1 [I] = 9999; arr2 [J] = 9999; I = 0; J = 0; для (к = л; K I, J, K; n1 = M - L + 1; n2 = Н - м; для (я = 0; г <п1; я ++) arr1 [I] = обр [л + I]; для (J = 0, J <п2; j ++) arr2 [J] = обр [M + J + 1]; arr1 [I] = 9999; arr2 [J] = 9999; I = 0; J = 0; для (к = л; K I, J, K; n1 = M - L + 1; n2 = Н - м; для (я = 0; г <п1; я ++) arr1 [I] = обр [л + I]; для (J = 0, J <п2; j ++) arr2 [J] = обр [M + J + 1]; arr1 [I] = 9999; arr2 [J] = 9999; I = 0; J = 0; для (к = л; K
James Dean
1

голосов
3

ответ
813

Просмотры

Понимание методов проектирования алгоритма в глубину

«Проектирование правильного алгоритма для данного приложения является трудной задачей. Это требует значительного творческий акта, принимая проблему и потянув решение из эфира. Это гораздо труднее, чем принимать чужую идею и изменить его или настройки его сделать его немного лучше. пространство вариантов вы можете сделать в разработке алгоритмов огромна, достаточно, чтобы оставить вам достаточно свободы, чтобы повеситься». Я изучил несколько основных методов проектирования алгоритмов, как Разделяй и властвуй, динамического программирования, жадного, с возвратами и т.д. Но я всегда не признать, что принципы применяются, когда я пришел через определенные проблемы программирования. Я хочу освоить проектирование алгоритмов. Так может ли один предложить лучшее место, чтобы понять принципы разработки алгоритмов в глубине .....
Krishna Kittu
1

голосов
1

ответ
372

Просмотры

ZeroDivisionError: 0.0 to a negative or complex power

Я хотел найти интеграл ((зш х) ^ 8, {х, 0,2 * Pi}) и попытался написать простую программу, без каких-либо внешних модулей, как «математика», которые вычисляют ряд Тейлора и суммировать его для интервала (0,2 * Pi) но ошибки Traceback (самый последний вызов последнего): Файл "E: \ питон \ ШАД \ sin.py", строка 27, в сумме + = (сер (я * 2 * 3,1415926 / к)) ** 8 Файл "E: \ питон \ ШАД \ sin.py", строка 21, в сер sin_part + = ((- 1) ** (J-1)) * (а ** (2к-1)) / ( факт (2 * J-1)) ZeroDivisionError: от 0,0 до отрицательного или сложной силы внезапно возникает. И я просто не вижу, где-то делится на ноль или имеют силу комплексного числа, все переменные имеют только реальное положительное значение. «K» представляет собой значение, как для точки зрения количества рядов и интервала (0,2 * Pi) разделения. сумма = 0 к = 20 = 0 разреша Защита факта (т): если т == 0 или т == 1: Рез = 1 еще:
Mikic
1

голосов
1

ответ
2.4k

Просмотры

R: Split a matrix in equal parts, retain succession and save parts

I have a matrix (first.transactions.data) with two columns id and date and 12499 rows. id date 1 19164958 2001-09-01 2 39244924 2001-11-01 3 39578413 2001-09-01 4 40992265 2001-11-01 5 43061957 2001-09-01 6 47196850 2001-11-01 7 51236987 2001-11-01 8 51326773 2001-09-01 9 54271247 2001-09-01 10 70765025 2001-09-01 11 70781923 2001-09-01 12 70782614 2001-09-01 13 70797166 2001-09-01 14 70992941 2001-09-01 15 70995813 2001-09-01 Now I want to write a function that can divide this matrix in equally long sub-matrices n. E.g with n = 3 a matrix 1/A that contains rows 1 to 5 a second matrix 2/B which contains rows 6 to 10 and a last matrix 3/C containing rows 11 to 15. I've tried using split or cut but I encounter several problems with them. E.g. sub
Patrik
1

голосов
1

ответ
283

Просмотры

Разделяй и властвуй пример свойства алгоритмов

У меня возникли проблемы с пониманием следующее свойство алгоритмов разделяй и властвуй. Рекурсивный метод, который делит проблему размера N на две независимые (непустых) части, что оно решает рекурсивно вызывает себя меньше, чем N раз. Доказательство Рекурсивной функция, которая делит проблему размера N на две независимые (непустых) части, что оно решает рекурсивно вызывает себя меньше, чем N раз. Если части являются одним из размера к и один из размера Nk, то общее число рекурсивных вызовов, которые мы используем Т (п) = Т (к) + T (пк) + 1, для N> = 1 с Т ( 1) = 0. решение Т (N) = N-1 немедленно по индукции. Если размеры суммировать до величины меньше, чем N, доказательство того, что число вызовов меньше, чем N-1 следует из индуктивного же аргумента. Я прекрасно понимаю, формальное доказательство выше. То, что я не понимаю, как это свойство связано с примерами, которые обычно используются, чтобы продемонстрировать идею разделяй и властвуй, в частности, к нахождению максимума задачи: статический двойной максимум (двойной а [], внутр л, внутр г) {если (л == г) возвращают [L]; т = INT (L + R) / 2; двойная и = тах (а, л, м); двойной v = тах (а, т + 1, г); если (и> v) вернуться и; остальное возвращение v; } В этом случае, когда состоит из N = 2 элементов макс (0,1) будет вызывать себя еще 2 раза, то есть не более (0,0) и максимальное (1,1), который равен N. Если N = 4 , не более (0,3) будет называться 2 раза, а затем каждый из последующих вызовов также будет вызывать максимум 2 раза, так что общее число вызовов 6> N. Что мне не хватает? в частности, к нахождению максимума задачи: статическая двойная макс (двойной а [], Int л, Int R) {если (л == г) возвращают [L]; т = INT (L + R) / 2; двойная и = тах (а, л, м); двойной v = тах (а, т + 1, г); если (и> v) вернуться и; остальное возвращение v; } В этом случае, когда состоит из N = 2 элементов макс (0,1) будет вызывать себя еще 2 раза, то есть не более (0,0) и максимальное (1,1), который равен N. Если N = 4 , не более (0,3) будет называться 2 раза, а затем каждый из последующих вызовов также будет вызывать максимум 2 раза, так что общее число вызовов 6> N. Что мне не хватает? в частности, к нахождению максимума задачи: статическая двойная макс (двойной а [], Int л, Int R) {если (л == г) возвращают [L]; т = INT (L + R) / 2; двойная и = тах (а, л, м); двойной v = тах (а, т + 1, г); если (и> v) вернуться и; остальное возвращение v; } В этом случае, когда состоит из N = 2 элементов макс (0,1) будет вызывать себя еще 2 раза, то есть не более (0,0) и максимальное (1,1), который равен N. Если N = 4 , не более (0,3) будет называться 2 раза, а затем каждый из последующих вызовов также будет вызывать максимум 2 раза, так что общее число вызовов 6> N. Что мне не хватает?
Artyom Dmitriev
1

голосов
1

ответ
3.1k

Просмотры

как разбить матрицу на 4 квадрантах в Python, используя NumPy

Я новичок в Python. Я пытаюсь реализовать алгоритм Штрассен. Размер матрицы всегда будет сила 2 в моей реализации. Итак, как же я разделить матрицу на 4 квадранта одинакового размера? Спасибо
so908
1

голосов
3

ответ
334

Просмотры

Разделить п в е случайные части

Что мне нужно, чтобы достичь в основном х кости катится = п сумма, но в обратном направлении. Итак, давайте создадим пример: в кости должна быть развернута в 5 раз, что означает (мин сумма 5, максимальная сумма 30..): Х = 5 Предположим, что в этом случае сумма, которая была свернутый 23, что означает: п = 23 Таким образом, что мне нужно, чтобы получить какой-либо из возможных комбинаций одного броска кубика (например, 6, 4, 5, 3, 5) Что я мог сделать в моем сознании до сих пор: Создание 5 случайных чисел. Добавьте их и получить сумму. Теперь разделить каждое случайное число на сумму и умножить на желаемом числе 23. В результате 5 случайных чисел, которые равны желаемое число 23. Проблема состоит в том, что это один возвращает случайные значения (десятичные значения, ниже 1 и выше 6) в зависимости от случайных чисел. Я не могу найти способ, чтобы изменить формулу только возвращать целые числа> = 1 или
RamRick
1

голосов
1

ответ
116

Просмотры

Разделяй и властвуй ALG, который работает в постоянном времени?

Можете ли вы указать мне пример разделяй и властвуй алгоритм, который выполняется за константное время! Я в «OMG! Я не могу думать о любой такой вещи» такой ситуации. Направьте меня к чему-то пожалуйста. Спасибо, я знаю, что ALG, что следует следующий recurence: Т (п) = 2Т (п / 2) + п будет сортировка слиянием. Мы разделив эту проблему на 2 подзадачи - каждый размером п / 2. Тогда мы берем н время, чтобы захватить все обратно в один отсортированный массив. Я также знаю, что Т (п) = Т (п / 2) + 1, будет бинарный поиск. Но что Т (п) = 1?
Rumen Hristov
1

голосов
3

ответ
167

Просмотры

Разделяй и властвуй алгоритм в линейной сложности? [Дубликат]

Этот вопрос уже есть ответ здесь: Максимальная разовая-продажа прибыль 19 ответов У нас есть массив чисел, представляющих цены с течением времени. Например, мы имеем [10, 4, 6, 8, 2, 5, 3, 9, 1]. Мы хотим знать, когда будет оптимальное время, чтобы купить и продать, чтобы максимизировать прибыль. В этом случае мы будем покупать по времени [4] = 2 и продавать по времени [7] = 9 для получения прибыли от 9 - 2 = 7. Математически, мы ищем а и б, где
Maxime Michel
1

голосов
3

ответ
845

Просмотры

Finding array indicies for “divide-and-conquer” algorithm?

Я должен реализовать алгоритм разделяй и властвуй в C ++ для максимальной функции, которая возвращает максимальное значение в массиве. Я понимаю, алгоритм и спроектировали функцию уже, но я бегу в проблемы с индексами массива. В псевдокоде, вот моя функция: Защиту макс (массив, STARTINDEX, ENDINDEX) // если есть только один элемент, вернуть его, если startIdx = endIdx вернуть массив [startIdx]; leftHigh = макс (массив, startIdx, endIdx / 2); rightHigh = макс (массив, endIdx / 2 + 1, endIdx); вернуться максимум leftHigh и rightHigh; Тем не менее, я бегу в проблему с этими значениями параметров рекурсивных вызовов. Следующий абзац показывает, что я нашел, когда я мысленно прошел через алгоритм: Простейший случай представляет собой массив из 4 элементов. Первый вызов макс будет принимать параметры индекса 0, 3, и будет принимать вызовы с параметрами 0, 1 и 2, 3. Первый рекурсивный вызов приведет вызовов с 0, 0 и 1, 1, которые оканчиваются правильно. Тем не менее, второй рекурсивный вызов приведет вызовы с 2, 1 и 2, 3. Первыми в конечном итоге приводит к переступая границы массива и вторые результаты в бесконечном цикле, так как уже были использованы эти параметры. Я пытался возиться с ним, например, с использованием (startIdx, endIdx / 2 -1) в течение первых границ и (endIdx / 2, endIdx) для вторых границ, и это фиксирует вторую ветвь рекурсивных вызовов, но портит первое , Есть ли способ, чтобы найти эти показатели, приводящие к правильному поведению? Я ценю помощь. второй рекурсивный вызов приведет вызовы с 2, 1 и 2, 3. Первыми в конечном итоге приводит к переступая границы массива и вторые результаты в бесконечном цикле, так как уже были использованы эти параметры. Я пытался возиться с ним, например, с использованием (startIdx, endIdx / 2 -1) в течение первых границ и (endIdx / 2, endIdx) для вторых границ, и это фиксирует вторую ветвь рекурсивных вызовов, но портит первое , Есть ли способ, чтобы найти эти показатели, приводящие к правильному поведению? Я ценю помощь. второй рекурсивный вызов приведет вызовы с 2, 1 и 2, 3. Первыми в конечном итоге приводит к переступая границы массива и вторые результаты в бесконечном цикле, так как уже были использованы эти параметры. Я пытался возиться с ним, например, с использованием (startIdx, endIdx / 2 -1) в течение первых границ и (endIdx / 2, endIdx) для вторых границ, и это фиксирует вторую ветвь рекурсивных вызовов, но портит первое , Есть ли способ, чтобы найти эти показатели, приводящие к правильному поведению? Я ценю помощь. endIdx) для вторых границ, и это фиксирует вторую ветвь рекурсивных вызовов, но путает первые. Есть ли способ, чтобы найти эти показатели, приводящие к правильному поведению? Я ценю помощь. endIdx) для вторых границ, и это фиксирует вторую ветвь рекурсивных вызовов, но путает первые. Есть ли способ, чтобы найти эти показатели, приводящие к правильному поведению? Я ценю помощь.
Bobazonski
1

голосов
2

ответ
134

Просмотры

Разделив изображение на два непрямоугольных не квадратные вспомогательном изображение в MATLAB

Предположим, что у меня есть изображение, как это: http://www.mathworks.com/help/releases/R2015a/examples/images/BasicImageImportProcessingAndExportExample_03.png (Это исходное изображение в MatLab pout.tif) И помощь изображение (двоичная маска) как это: http://upload7.ir/uploads//df17be22203e3099ba0d86e7cb203477bc909244.jpg (с тем же размером исходного изображения) я написал простой код для разделения исходного изображения в двух изображений: I = imread ( «pout.tif» ); фигура, imshow (I), название ( 'исходное изображение') Ih = imread ( 'helpPic.jpg'); Ih = rgb2gray (Ih); Ih = im2bw (Ih); фигура, imshow (Ih), название ( 'помощь изображение') im1 = I. * uint8 (Ih); фигура, imshow (im1), название ( 'im1') IM2 = I * uint8 (1-Ih); фигура, imshow (im2), название ( 'im2') И результаты: http://upload7.ir/uploads//12f09dde101cd4c98b53fcc0d400be87029ee07a.
Karo Amini
1

голосов
1

ответ
256

Просмотры

Как избежать переполнения размножению очень больших чисел с рекурсивной функцией (C #, D & C)

Когда рекурсивная функция срабатывает и возвращает результаты на пути, он выходит из строя из-за переполнения данных. Как я могу использовать этот алгоритм D & C и избежать этой проблемы? статические долго долго Зарб (долго, долго б, Int N) {Int64 W, X, Y, Z; INT s; если (а == 0 || Ь == 0) возвращает 0; если (п
Ali Yousefi

Просмотр дополнительных вопросов