andy74rus36
?>

(Работа на эмуляторе emu8086) Я нашел интересную задачку, которую не могу решить написать программу. Имеются два массива 8-ми битных целых чисел со знаком. Сформировать массив частных от целочисленного деления соответствующих элементов этих массивов. Показать все три массива.

Информатика

Ответы

bulenbeiser
Алгоритм. Отсортируем массив за O(nlogn). Запустим цикл по всем k, в теле цикла будем искать индексы i <= j, такие, что A[i] + A[j] = -A[k]. Понятно, что этот поиск надо делать за O(n), чтобы общее время работы было квадратичным.

Искать будем с двух указателей. Рассмотрим кусок массива, в котором ищем ответ A[l..r] (первоначально l = 1, r = n). Посмотрим на A[l] + A[r]. Если эта сумма больше, чем нужно, уменьшим на 1 число r, если меньше - увеличим на 1 число l, если равно -A[k] - победа, выводим ответ (l, r, k). Будем повторять это в цикле, пока l не станет больше r.

Если после выполнения цикла по k искомая тройка так и не нашлась, пишем "нет".

Корректность. Пусть в какой-то момент A[l] + A[r] < -A[k]. Тогда, чтобы иметь возможность получить A[i] + A[j] = -A[k], надо сумму увеличить. A[l] оказалось настолько мало, что даже если прибавить к нему самое большое возможное число (а это как раз A[r] - массив-то отсортирован!), то всё равно получается слишком мало. Значит, A[l] в ответе не будет, и можно безбоязненно выкинуть его из рассмотрения. Аналогично будет и в случае, когда A[l] + A[r] > -A[k].
Осталось показать, что если такая тройка индексов существует, то наш алгоритм не выдаст неверный ответ "нет". Но это очевидно: если ответ (I, J, K), то уж при k = K алгоритм что-нибудь да найдёт.

Время работы. Внутренний цикл выдает ответ не более чем за линейное время: всякий раз размер массива уменьшается на 1, всего элементов в массиве n, а на каждом шаге тратится константное время; пусть время выполнения внутреннего цикла T'(n) < an. Тогда все n проходов внешнего цикла затратят время T1(n) <= n T'(n) < an^2.
Сортировку можно сделать за время T2(n) < b nlogn < bn^2
Общее время работы T(n) = T1(n) + T2(n) < an^2 + bn^2 = cn^2
svetlana-sharapova-762621

30 лет назад весь мир заворожённо наблюдал рождение блокбастеров века – «Терминатор», «Звёздные войны», «Робокоп». Советские дети просто зачитывались повестями Кира Булычёва, а любимыми фильмами были «Гостья и будущего» и «Лиловый шар». Волна научной фантастики и роботомании захватила умы советской молодёжи. И посей день, роботы вызывают самый неподдельный интерес у молодого поколения.

На самом деле, история робототехники уходит своими корнями в глубокую древность. Аж за 350 лет до нашей эры был создан первый в истории механический голубь. Его создатель – древнегреческий математик Архит – заложил прочный фундамент для дальнейшего развития механики.

Вообщем, робототехника нам нужна, в наше время роботы нужны, то чего не можем сделать мы , сделают они - роботы.

Ребят почитайте до конца, в конце норм вообще!!! В конце , последнее предложение классное.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

(Работа на эмуляторе emu8086) Я нашел интересную задачку, которую не могу решить написать программу. Имеются два массива 8-ми битных целых чисел со знаком. Сформировать массив частных от целочисленного деления соответствующих элементов этих массивов. Показать все три массива.
Ваше имя (никнейм)*
Email*
Комментарий*