|
|
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Какую? Свою? У меня щас идея - как заставить миллиард китайцев вместо Captcha решать задачи области ИИ и краудсорсинга. И мне это во много раз интереснее чем академические задачки. Мир сложнен и многообразен. Как можно изучая Скиенну изучать It? Никак. It можно знать только приобщаясь к полезным стартапам и задачам нашего времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2015, 14:12 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
mayton Как можно изучая Скиенну изучать It? Никак. SashaMercury - можно можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2015, 19:16 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Интересно получается, для поиска минимума или максимума необходимо перебрать n элементов, а обновлять значение переменной в которой этот минимум хранится потребуется на порядок раз меньше. Например для 1.000.000.000.000 элементов потребуется в среднем 28 обновлений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 01:47 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИнтересно получается, для поиска минимума или максимума необходимо перебрать n элементов, а обновлять значение переменной в которой этот минимум хранится потребуется на порядок раз меньше. Например для 1.000.000.000.000 элементов потребуется в среднем 28 обновлений. Интересно в том контексте, что от этой избыточности(если это можно так назвать) было бы здорово избавиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 02:18 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryТогда мне не нравится этот вариант. Какое-то 'грязное' решение. Неужели нет другого ? Насколько я знаю нет ГСЧ без повторов, рано или поздно повторы будут. Так что другого нет. Изобретай наиболее оптимальный способ отлова повторов: 1. Биткарта. Работает быстро, но при большом диапазоне займет много места. 2. Заполняешь, сортируешь, в один проход проверяешь на повторы, заменяя повторы на новые случайные, затем снова сортируешь, проверяешь и т.д. пока проверка не покажет что повторов нет. Лишнего места не займет, но будут затраты на сортировку. Кстати, обладает ли такой алгоритм свойством конечность? Особенно при достаточно больших n и k ? Как долго он может выполняться ? Судя по всему я нашёл решение данной задачи. Например алгоритм R Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Добавлю свой перевод обоснования из w. Согласно алгоритму первоначально необходимо заполнить целевой массив R мощностью k первыми k элементами множества S. Следом необходимо перебрать оставшиеся в S элементы, до тех пор пока они не закончатся. На каждой итерации последнего перебора для каждого элемента s[i] алгоритм генерирует случайное число j из диапазона [1,i]. Если j<=k, то происходит присваивание r[j]<-s[i]. В действительности, на каждой итерации вероятность того, что будет выбран элемент для целевого множества (всего элементов i, хороших k, потому собственно и получаем, прим. пер.). Вероятность того что будет произведена перезапись конкретного элемента j из целевого множества R . Для того чтобы доказать что после окончания алгоритма каждый элемент S имел возможность попасть в целевое множество воспользуемся индукцией. После итерации i-1 вероятность того, что будет выбран элемент для целевого множества. Так как вероятность того что данный элемент будет перезаписан на следующей итерации , вероятность того что он не будет перезаписан на следующей итерации равна.Таким образом, вероятность того что любой элемент из множества S будет присутствовать в целевом множестве после итерации i определяется как произведение двух событий: элемент будет присутствовать в целевом множестве после предыдущей итерации, и не будет перезаписан (будет сохранён) на итерации i. Имеем . Значит результат справедлив для i, и следовательно справедлив по индукции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 06:41 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Вообще-то для большого, но известного n, выборка k значений (где k<<n) делается гораздо проще, без сортировки и за k итераций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 14:03 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВообще-то для большого, но известного n, выборка k значений (где k<<n) делается гораздо проще, без сортировки и за k итераций. Это совсем другая задача ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:16 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SashaMercuryDima T2. Заполняешь, сортируешь, в один проход проверяешь на повторы, заменяя повторы на новые случайные, затем снова сортируешь, проверяешь и т.д. пока проверка не покажет что повторов нет. Лишнего места не займет, но будут затраты на сортировку. Кстати, обладает ли такой алгоритм свойством конечность? Особенно при достаточно больших n и k ? Как долго он может выполняться ? Теорию вероятностей помню смутно, поэтому формулами не буду умничать, но при k значительно меньше n вероятность выпадения повтора небольшая, т.е. повторные проходы если и будут, то 1-3, не больше. Самая тяжелая сортировка - первая, т.к. последующие (если будут) сортируют почти отсортированный массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:26 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСудя по всему я нашёл решение данной задачи. Например алгоритм R Можно поправить алгоритм и будет работать с интервалом 1...n. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Только при k значительно меньше n мой велосипед может оказаться быстрее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2015, 15:33 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryпропущено... Кстати, обладает ли такой алгоритм свойством конечность? Особенно при достаточно больших n и k ? Как долго он может выполняться ? Теорию вероятностей помню смутно, поэтому формулами не буду умничать, но при k значительно меньше n вероятность выпадения повтора небольшая, т.е. повторные проходы если и будут, то 1-3, не больше. Самая тяжелая сортировка - первая, т.к. последующие (если будут) сортируют почти отсортированный массив. Допустим у нас 10 чисел, нам нужно выбрать три. Как долго мы будем случайно выбирать числа прежде чем у нас будет три уникальных ? А если числе 10^12 а уникальных нужно 10^12 - 1. Можем ли мы утверждать что если мы просто будем пропускать повторы мы за обозримый период времени получим множество уникальных чисел ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 06:20 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SashaMercury Допустим у нас 10 чисел, нам нужно выбрать три. Как долго мы будем случайно выбирать числа прежде чем у нас будет три уникальных ? Исходим из того что ГСЧ выдает числа с равной вероятностью. Как с помощью теории вероятности посчитать не знаю, делаем проще. Тест Код: plaintext 1. Результат5,10,1,1,9,6,6,7,6,9,7,4,3,5,7,5,5,10,2,8,9,9,1,5,10,7,8,4,4,5 в худшем случае 3 прохода для последовательности 5,7,5,5,10 SashaMercuryА если числе 10^12 а уникальных нужно 10^12 - 1. Можем ли мы утверждать что если мы просто будем пропускать повторы мы за обозримый период времени получим множество уникальных чисел ? При 2k > n быстрее решать обратную задачу: выбрать лишние. Это решается в один проход: выбираем одно лишнее, оставшиеся 10^12 - 1 требуемый результат :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 07:57 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercury Допустим у нас 10 чисел, нам нужно выбрать три. Как долго мы будем случайно выбирать числа прежде чем у нас будет три уникальных ? Исходим из того что ГСЧ выдает числа с равной вероятностью. Как с помощью теории вероятности посчитать не знаю, делаем проще. Тест Код: plaintext 1. Результат5,10,1,1,9,6,6,7,6,9,7,4,3,5,7,5,5,10,2,8,9,9,1,5,10,7,8,4,4,5 в худшем случае 3 прохода для последовательности 5,7,5,5,10 где гарантия того что в следующий раз не потребуется 10 проходов ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 08:14 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SashaMercuryгде гарантия того что в следующий раз не потребуется 10 проходов ? Нужны гарантии: берешь и гоняешь алгоритм в цикле, собирая статистику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 08:20 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercuryгде гарантия того что в следующий раз не потребуется 10 проходов ? Нужны гарантии: берешь и гоняешь алгоритм в цикле, собирая статистику. Тогда мы говорим о статистике. Ни о чём более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2015, 10:07 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SS Судя по всему я нашёл решение данной задачи. Например алгоритм R Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Добавлю свой перевод обоснования из w. Согласно алгоритму первоначально необходимо заполнить целевой массив R мощностью k первыми k элементами множества S. Следом необходимо перебрать оставшиеся в S элементы, до тех пор пока они не закончатся. На каждой итерации последнего перебора для каждого элемента s[i] алгоритм генерирует случайное число j из диапазона [1,i]. Если j<=k, то происходит присваивание r[j]<-s[i]. В действительности, на каждой итерации вероятность того, что будет выбран элемент для целевого множества (всего элементов i, хороших k, потому собственно и получаем, прим. пер.). Вероятность того что будет произведена перезапись конкретного элемента j из целевого множества R . Для того чтобы доказать что после окончания алгоритма каждый элемент S имел возможность попасть в целевое множество воспользуемся индукцией. После итерации i-1 вероятность того, что будет выбран элемент для целевого множества. Так как вероятность того что данный элемент будет перезаписан на следующей итерации , вероятность того что он не будет перезаписан на следующей итерации равна.Таким образом, вероятность того что любой элемент из множества S будет присутствовать в целевом множестве после итерации i определяется как произведение двух событий: элемент будет присутствовать в целевом множестве после предыдущей итерации, и не будет перезаписан (будет сохранён) на итерации i. Имеем . Значит результат справедлив для i, и следовательно справедлив по индукции. Сразу не стал писать, но вот что меня смутило. В доказательстве чётко выделены события которые приведут к тому, что после i итерации элемент будет в целевом массив. Однако к таким событиям почему-то не отнесли вероятность того что конкретный элемент появится в целевом массиве именно на i итерации. Непонятно почему это не оговаривается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2015, 04:58 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Решал на днях несколько задач. По трём из них у меня возникли некоторые вопросы. Возможно у кого-то будут соображения. Перевод. Первая задача не требует перевода, добавлю перевод 2 и 3: 4 -29 Некий Мистер Дал утверждает что разработал новую структуру данных типа очередь с приоритетом. Данная структура поддерживает операции Insert, Maximum, Extract Maximum, каждая из этих операций имеет асимптотику О(1). Докажите что он ошибается. (Подсказка: .... используйте тот факт что время исполнения сортировки 4 -30 БД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко. Предлагается два варианта организации БД: 1. Использовать одномерный массив и бинарный поиск 2. Создать два массива, в первом будет 60% записей(к ним обращение будет чаще всего), во втором остальные 40. Сначала ищем в первом, если не нашли, идём во второй. Бинарный поиск в каждом из массивов. Какой подход лучше? Какой подход лучше если в обоих случаях использовать неотсортированный массив и линейный поиск ? Мои соображения. По задаче 3-28 вопросов практически нет, её можно решить следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Q1) Может быть есть опечатки, но тут всё понятно. Вопрос такой: можно ли решить данную задачу иначе за линейное время(без использования деления) ? Q2) Со второй задачей сложнее. Очевидным был бы следующий ответ: Так как Extract Maximum выполняется за O(1) то в таком случае сортировка возможна за O(n). Но 1. Зачем остальные части условия ? 2. Разве существует доказательство того что сортировка не может быть реализована за O(n) ? Следовательно рассуждаю я скорее всего неверно(при решении данной задачи). Есть ли у вас какие-то идеи ? Q3) Решение третьей задачи кажется совсем простым. В первом случае нужно задать такой вопрос, что лучше, log(n) или 2log(n) ? Конечно лучше хранить всё в одномерном упорядоченном массиве и использовать двоичный поиск. Теперь пусть массивы будут неупорядоченны, и поиск будет линейный. В таком случае лучше разделить массив на два массива, и сначала осуществить поиск в первом массиве, а затем во втором. Но дело в том, что все рассуждения выше, как вы понимаете, относятся только к операции Search. Как провести комплексное рассуждение и сравнение я не знаю. Подскажите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 07:58 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМои соображения. По задаче 3-28 вопросов практически нет, её можно решить следующим образом:Да, мне с ходу тот-же самый алгоритм придумался. SashaMercuryQ1) Может быть есть опечатки, но тут всё понятно. Вопрос такой: можно ли решить данную задачу иначе за линейное время(без использования деления) ?А это ограничение я не понял. Какое такое деление автор задачи ожидает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 18:15 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SashaMercuryQ2) Со второй задачей сложнее. Очевидным был бы следующий ответ: Так как Extract Maximum выполняется за O(1) то в таком случае сортировка возможна за O(n). Но 1. Зачем остальные части условия ? 2. Разве существует доказательство того что сортировка не может быть реализована за O(n) ? Следовательно рассуждаю я скорее всего неверно(при решении данной задачи). Есть ли у вас какие-то идеи ?Тоже не понял, к чему там подсказка. Я рассуждаю так: а) Если в структуре данных хранится несколько элементов, то эта структура может рассматриваться как массив. В дальнейшем буду использовать это слово и сопутствующую терминологию. б) Чтобы операция Maximum выполнялась за O(1), надо чтобы в данном массиве данных максимальный элемент был всегда четко указан. Это можно сделать двумя способами, либо хранить дополнительно индекс максимального элемента, либо держать в массив в сортированном состоянии. в) Если массив изначально не сортирован, но мы имеем индекс на его максимальный элемент то чтобы выполнялась операция ExtractMaximum выполнялась за O(1) надо чтобы мы могли за O(1) найти новый максимальный элемент после экстракта предыдущего максимума. Значит нам нужно где-то хранить индекс предыдущего во величине элемента. Это проще всего сделать если хранить индекс предыдущего элемента вместе с самим элементами... Вывод - в случае хранения данных не в сортированном виде мы должны хранить его в связном списке. г) Но в случае связанного списка для вставки элемента в правильное место (что бы сохранить сортированность списка), нам понадобится это место найти, а это уже обязательно O(n). д) Если данные хранятся в виде сортированного индексированного массива, то для нахождения максимума достаточно взять его последний элемент, а для нахождения предыдущего максимально - предпоследний. Все просто и легко, Maximum и ExtractMaximum выполняются за O(1). е) А если у нас сортированный индексированный массив, то операция вставки потребует найти те два элемента между которыми надо вставлять новый, а это как минимум O(log n). А потом еще двигать хвост массива чтобы освободить место под новый элемент, а это еще O(n). Таким образом у нас и получается что структура данных у которой все три завяленные операции выполняются за O(1) не получается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 18:16 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SashaMercury 4 -30 БД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко.Не совсем. Там имеется 40% людей которые делают 60% запросов. Это значит что результат поиска "своей" записи надо умножить на частоту обращений. SashaMercuryQ3) Решение третьей задачи кажется совсем простым. В первом случае нужно задать такой вопрос, что лучше, log(n) или 2log(n) ? Конечно лучше хранить всё в одномерном упорядоченном массиве и использовать двоичный поиск. Не совсем... К тому же у нас заранее известен n. В случае одного общего массива мы имеем: 10000*log(10000)=132877.1238. А в случае двух массивов мы имеем: 6000*log(4000) + 4000*log(6000)=71794.7057 + 50202.9871 = 121997.6928 Итого, два массива при бинарном поиске получаются чуть-чуть получше, примерно на 8%. Аналогично для линейного: Общий массив: 10К * 10К = 100М Два массива: 6К*4К+4К*6К= 24К+24К = 48К Выигрыш получается еще больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 18:37 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryQ1) Может быть есть опечатки, но тут всё понятно. Вопрос такой: можно ли решить данную задачу иначе за линейное время(без использования деления) ?А это ограничение я не понял. Какое такое деление автор задачи ожидает? Самый простой и эффективный алгоритм: все перемножить, затем делить на каждый элемент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 18:52 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercury 4 -30 БД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко.Не совсем. Там имеется 40% людей которые делают 60% запросов. Неверный вывод. Сказано "часто", без конкретики, я так понимаю это точно не 60:40, может 100:1 или 1000:1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 19:00 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНекий Мистер Дал утверждает что разработал новую структуру данных типа очередь с приоритетом. Данная структура поддерживает операции Insert, Maximum, Extract Maximum, каждая из этих операций имеет асимптотику О(1). Докажите что он ошибается. (Подсказка: .... используйте тот факт что время исполнения сортировки Да. Мистер Дал имеет возможность создать такую структуру. Это может быть автомат (конечный?) который имеет входы INSERT, EXTRACT_MAXIMUM... и бесконечное число состояний которое моделирует различные варианты входов. Правда мистер Дал забыл сказать что ему возможно понадобится бесконечно большая память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 19:01 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Dima TWhite Owlпропущено... А это ограничение я не понял. Какое такое деление автор задачи ожидает? Самый простой и эффективный алгоритм: все перемножить, затем делить на каждый элемент.А ну да. Самый простой. Однако не самый эффективный :) Все-таки O(n) против O(n^2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 20:02 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
Dima TWhite Owlпропущено... Не совсем. Там имеется 40% людей которые делают 60% запросов. Неверный вывод. Сказано "часто", без конкретики, я так понимаю это точно не 60:40, может 100:1 или 1000:1 Чего это вдруг неверный? "40% of whom known as good customers and who together account for 60% access to the database". Откуда ты взял вариативность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 20:05 |
|
||
|
SSS. Некоторые задачи
|
|||
|---|---|---|---|
|
#18+
White OwlDima Tпропущено... Самый простой и эффективный алгоритм: все перемножить, затем делить на каждый элемент.А ну да. Самый простой. Однако не самый эффективный :) Все-таки O(n) против O(n^2) с чего вдруг O(n^2)? Два прохода: первый перемножить, второй получить результат. Два цикла против трех и никакого лишнего расхода памяти. White OwlDima Tпропущено... Неверный вывод. Сказано "часто", без конкретики, я так понимаю это точно не 60:40, может 100:1 или 1000:1 Чего это вдруг неверный? "40% of whom known as good customers and who together account for 60% access to the database". Откуда ты взял вариативность? Не буду спорить, оригинал не понимаю. Не силен в английском. Пользовался Сашиним переводом: SashaMercuryБД содержит 10^4 записей в отсортированном порядке. 60% записей используются часто, остальные 40% редко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2015, 20:30 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39027125&tid=1340824]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 472ms |

| 0 / 0 |
