Russian Qt Forum
Ноябрь 23, 2024, 17:06
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
алгоритмы
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: алгоритмы (Прочитано 17523 раз)
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
алгоритмы
«
:
Август 28, 2010, 18:47 »
есть чего-нибудь почитать? А то был на собеседовании, не смог решить тамошние алгоритмические задачки... Только дома решил... Глубоко уязвлен собственной тупостью. Есть ли какая-нибудь книга (учебник 1го курса пойдет) где есть какие-л алгоритмические задачки? А то у нас не было по большому счету ничего.
Записан
Alex_cs_gsp
Гость
Re: алгоритмы
«
Ответ #1 :
Август 28, 2010, 19:25 »
Алгоритмические задачки по программированию, или iq-шные, как в мелкософте спрашивают???
Если программирование, и задачки на простенькие алгоритмы (а не на такие как фрактальное сжатие изображений), то есть хорошая книга Г.Уорен "Алгоритмические трюки для программистов" (есть в сети). То, что для первых курсов, там сухая теория.
Есть еще Мозговой М.В. "Занимательное программирование" - там по чуть-чуть всех алгоритмов, и тоже не сухо. Примеры на Pascal и С++.
Если можешь выложи пожалуйста задачку, и скажи сколько на нее времени дали. Хочу свою тупость проверить.
«
Последнее редактирование: Август 28, 2010, 19:52 от Alex_cs_gsp
»
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: алгоритмы
«
Ответ #2 :
Август 28, 2010, 19:58 »
Задачка "в лоб" простейшая, а вот оптимизация по скорости/памяти хуже:)
Цитировать
[27.08.10 14:02:17] ABBAPOH: а 2я задачка - 2 строки длиной N и K, K <= N, в них записаны в символьном виде числа, разделены пробелами. Повторений внутри строки нет. Найти все числа, встречающиеся в обоих строках и напечатать из позицию. Длина чисел может быть большая (>100 знаков)
[27.08.10 14:02:32] ABBAPOH: сложность O(N), доп память O(K)
В условии точно не сказано что можно использовать, но я решал на чистом си. Мб если б мозг работал бы, там бы и решил (тк идея решения была уже там, но я не смог в мозгу просчитать сколько оно съест памяти... Показалось много:) надо было просто написать на сам деле)
давалось полчаса на эту, еще 1 совсем простенькую + еще общего плана на IQ, на них можно было забить
«
Последнее редактирование: Август 28, 2010, 20:01 от Авварон
»
Записан
Alex_cs_gsp
Гость
Re: алгоритмы
«
Ответ #3 :
Август 28, 2010, 20:41 »
Все, что быстро пришло в голову - это "смещать" меньший массив относительно большего и сравнивать символьно, но это не линейная сложность. А если хеши, то память не O(K) и также не линейная скорость.
«
Последнее редактирование: Август 28, 2010, 22:01 от Alex_cs_gsp
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: алгоритмы
«
Ответ #4 :
Август 28, 2010, 21:00 »
Цитата: Авварон от Август 28, 2010, 19:58
ABBAPOH: а 2я задачка - 2 строки длиной N и K, K <= N, в них записаны в символьном виде числа, разделены пробелами. Повторений внутри строки нет. Найти все числа, встречающиеся в обоих строках и напечатать из позицию. Длина чисел может быть большая (>100 знаков)
[27.08.10 14:02:32] ABBAPOH: сложность O(N), доп память O(K)
Я спробовал (аттач), в полчаса конечно не уложился (ушел почти час). Отладка - конечно и конь не валялся. Нет ввода от командной строки. Ну и я-то был на своей машине (а не в гостях). Так что расстраиваться особо нечего
Записан
Alex_cs_gsp
Гость
Re: алгоритмы
«
Ответ #5 :
Август 28, 2010, 21:12 »
Цитата: Igors от Август 28, 2010, 21:00
Цитата: Авварон от Август 28, 2010, 19:58
ABBAPOH: а 2я задачка - 2 строки длиной N и K, K <= N, в них записаны в символьном виде числа, разделены пробелами. Повторений внутри строки нет. Найти все числа, встречающиеся в обоих строках и напечатать из позицию. Длина чисел может быть большая (>100 знаков)
[27.08.10 14:02:32] ABBAPOH: сложность O(N), доп память O(K)
Я спробовал (аттач), в полчаса конечно не уложился (ушел почти час). Отладка - конечно и конь не валялся. Нет ввода от командной строки. Ну и я-то был на своей машине (а не в гостях). Так что расстраиваться особо нечего
Что-то я не увидел линейного времени и линейной зависимости расхода памяти от строки K.
Код:
size_t total = num1 + num2;
Token * token = new Token[total];
Получается память O(K+N)
А сложность алгоритма, как я понял у тебя может быть даже больше чем O((K+N)^2) - быстрая сортировка, уже не за линейное время + потом еще проход по объединенному массиву. Или нет?
«
Последнее редактирование: Август 28, 2010, 21:19 от Alex_cs_gsp
»
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: алгоритмы
«
Ответ #6 :
Август 28, 2010, 21:18 »
ну O(K+N) == O(max(K,N) == O(N) а решение ща гляну... мне тоже где-то час понадобился (30 минут там и полчаса дома на точный рассчет оценок).
Igors
Да, забыл уточнить - в задаче требование было что скорость не зависит от количества чисел. Но тем не менее, вы не укладываетесь по памяти
«
Последнее редактирование: Август 28, 2010, 21:23 от Авварон
»
Записан
Alex_cs_gsp
Гость
Re: алгоритмы
«
Ответ #7 :
Август 28, 2010, 21:21 »
O(K+N) == O(max(K,N) == O(N))
Это как если будет выделено памяти K+N, а не max(K,N) ?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: алгоритмы
«
Ответ #8 :
Август 28, 2010, 21:25 »
O(x) == const*x => O(x+y) == c1*(x+y) <= c1*2*max(x,y) <= c2*max(x,y) == O(max(x,y))
это можно выделить памяти z*K но не z*N
Записан
Alex_cs_gsp
Гость
Re: алгоритмы
«
Ответ #9 :
Август 28, 2010, 21:30 »
Что-то не совсем понял. Выложенный исходник при любом N и К
всегда
требует памяти N+K, следовательно и сложность алгоритма зависит как от N так и от K.
Если скорость не зависит от количества чисел, то это уже O(1), такое вообще возможно???
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: алгоритмы
«
Ответ #10 :
Август 28, 2010, 21:35 »
если сложность зависит от 2х величин, то она зависит только от наибольшей их них (оценка сверху)
скорость должна зависеть не от количества чисел, а от длины строки (то есть она должна работать одинаково если строка из миллиона коротких чисел или из одного длинного - на N знаков)
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: алгоритмы
«
Ответ #11 :
Август 28, 2010, 21:38 »
Цитата: Авварон от Август 28, 2010, 21:18
Да, забыл уточнить - в задаче требование было что скорость не зависит от количества чисел. Но тем не менее, вы не укладываетесь по памяти
Ага, теперь дошло что от Вас хотели: что-то типа "сдвиг решетки". Находим совпадения сравнивая до K сначала начиная с 0-го элемента большей строки, затем с 1-го и так N - K раз. Да, так короче, но это ж издевательство над скоростью
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: алгоритмы
«
Ответ #12 :
Август 28, 2010, 21:42 »
нет, так вроде не хотели:) я имею решение удовлетворяющее условию, но имхо до него дойти сходу невозможно
Записан
Alex_cs_gsp
Гость
Re: алгоритмы
«
Ответ #13 :
Август 28, 2010, 21:52 »
Любой алгоритм сортировки с попарным сравнением не лучше N*log(N). Может нужно создать пустой массив и инкрементировать элементы соответствующие какому-то хитрому разбиению строк. Это можно сделать за линейное время, если известен диапазон чисел и они целые ( количество символов между пробелами). С памятью согласен, если с точностью до постоянного коэффициента (тут он не больше N-1).
«
Последнее редактирование: Август 28, 2010, 21:58 от Alex_cs_gsp
»
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: алгоритмы
«
Ответ #14 :
Август 28, 2010, 22:08 »
диапазон известен (от 0 и до 10 в степени N) числовое значение использовать бесполезно
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...