Модератор
|
||||||
1 | ||||||
Найти три максимальных элемента числового списка за время O(n), где n-длина списка07.02.2014, 10:43. Показов 2341. Ответов 20
Метки нет (Все метки)
Мое решение:
0
|
07.02.2014, 10:43 | |
Ответы с готовыми решениями:
20
Из произвольного списка и числового списка построить новый список Для исходного сложного числового списка, построить список, состоящий из элементов исходного списка, отрицательные числа в котором заменены 0 Удаление элемента, стоящего посередине списка (если длина списка нечетна) Предикат, который формирует список из номеров максимальных элементов числового списка |
4544 / 2738 / 486
Регистрация: 28.04.2012
Сообщений: 8,648
|
||||||
07.02.2014, 15:11 | 2 | |||||
1
|
Заблокирован
|
||||||
07.02.2014, 15:28 | 4 | |||||
1
|
4544 / 2738 / 486
Регистрация: 28.04.2012
Сообщений: 8,648
|
|
07.02.2014, 15:50 | 5 |
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
||||||
07.02.2014, 16:15 | 6 | |||||
2
|
Модератор
|
||||||
07.02.2014, 16:26 [ТС] | 7 | |||||
korvin_, я не иронизировал. У Вас действительно изящный код. И мой можно было бы чуть облагородить:
ur_naz, строго говоря, Вы тоже правы. Трехкратное применение max с удалением результата - это сложность тоже O(n).
0
|
Заблокирован
|
||||||
07.02.2014, 17:31 | 8 | |||||
если честно не совсем понял смысла...
ну вот совсем простой вариант
Проблема в том, что ваш код у меня споткнется где-то на 20тыс. элементов, а мой отработает нормально.
0
|
Модератор
|
|
07.02.2014, 18:02 [ТС] | 9 |
- этот вариант делает много лишнего: он сортирует список, а это - значительно бОльшие затраты ресурсов. И у самых лучших сортировок сложность O(n*log2n).
- для числовых списков навряд ли...
1
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|||||||||||
08.02.2014, 16:45 | 10 | ||||||||||
Усложняю Количество максимальных элементов должно задаваться аргументом функции. Добавлено через 25 минут
1
|
Модератор
|
|
08.02.2014, 20:48 [ТС] | 11 |
- хорошее дополнение... При количестве максимальных, близких к размеру исходного массива, задача "плавно перетекает" в задачу сортировки. И уже не решается за время O(n)
0
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
08.02.2014, 22:54 | 12 |
Нет. Сложность всё равно будет линейной. Просто стоимость шага определяется количеством.
0
|
Модератор
|
|
09.02.2014, 11:32 [ТС] | 13 |
nullxdth, что-то у меня Ваш код в LispWorks возвращает nil. Вообще же, этот алгоритм эквивалентен частичной сортировке выбором. Если задавать n близким к размеру массива, затраты будут близки к O(n2)
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
09.02.2014, 17:01 | 14 |
Дык два параметра, n и k, сложность - O(nk). Если k фиксировать, получается O(n).
1
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
09.02.2014, 18:09 | 16 |
Гм. Ну как-то нет. Вы не можете зафиксировать n, поэтому не можете зафиксировать k = n. Это же фиксация относительно n - n идёт к бесконечности, k остаётся.
Когда вы пишете O(<что-нибудь>), весь смысл в том, что <что-нибудь> не фиксируется, а устремляется, например, к бесконечности. Это нотация для асимптотического поведения. Если a_n = O(n), то асимптотически a_n растёт не более чем линейно, когда n растёт.
1
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
09.02.2014, 19:12 | 17 |
helter, всё верно. Я бы не смог объяснить лучше!
1
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
09.02.2014, 19:19 | 18 |
0
|
Модератор
|
|||||||||||
09.02.2014, 19:40 [ТС] | 19 | ||||||||||
nullxdth, Ваш алгоритм эквивалентен частичной сортировке выбором. Сама сортировка выбором требует:
1 проход = n просмотров; 2 проход = n-1 просмотр; ... n проход = 1 просмотр Итого 1+2+3+...+n=n(n+1)/2 просмотров. При стремлении n к бесконечности, эта величина растет как n2. Или я неправ? А теперь посмотрим, что меняется, если искать не "все максимальные", а n-3 или n-5. Вполне очевидно, что квадратичный характер зависимости "никуда не денется". Мой алгоритм (будучи обобщен на случай произвольного числа максимальных) при одном просмотре исходного массива (сложность O(n)) будет требовать просмотра массива максимальных. И если количество максимальных близко к размеру исходного массива, то тоже выйдет O(n2). Добавлено через 4 минуты Работает, но ищет не k, а (k-1) максимальный:
Вот достаточно прозрачный код:
1
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
||||||
09.02.2014, 20:11 | 20 | |||||
Сообщение было отмечено как решение
Решение
Ох. Нет, это не так. Пусть k - количество максимальных элементов которые нужно найти. Сложность будет: O(2k*n). 2 потому что ищем минимальный элемент и выбрасываем его. 2k - константа которая не зависит от n и не влияет на динамику роста сложности. Вообщем, helter, уже всё сказал как бы.
Добавлено через 6 минут Нет, это не так. Но баг действительно есть, при повторяющихся элементах! Вот так надо переписать:
Добавлено через 10 минут Ну так это не эквивалентный алгоритм-то. В моей реализации стоимость каждого шага фиксирована (2k). А у вас, конечно, квадратичная сложность.
3
|
09.02.2014, 20:11 | |
09.02.2014, 20:11 | |
Помогаю со студенческими работами здесь
20
Создание списка, печать списка на экран, добавления элемента в начало списка, конец списка Предикат, переставляющий все отрицательные элементы числового списка в конец списка Определить два максимальных элемента некоторого списка Работа с деками. Найти среднее арифметическое списка, добавить его в качестве нового элемента в начало и конец списка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке
В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
|
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
|
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins
В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
|
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang
Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
|
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
|
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
|
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
|
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
|
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента!
4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве).
Первое вводное занятие. . .
|
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
|
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений
Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
|
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
|