Re: Алгоритм
От: Pzz Россия https://github.com/alexpevzner
Дата: 19.02.22 12:26
Оценка: +1
Здравствуйте, Kleo, Вы писали:

K>Есть массив M с типом int32, в массиве N элементов. N – очень много.

K>Есть комп. с неограниченным объемом памяти. Память можно использовать любым образом.
K>Вопрос:
K>Циклом в один проход найти 2 и более повторяющихся элементов.

Ну если памяти неограниченно, заведи массив из 2^32 флагов. Вернее, тебе потребуется не битовый флаг (да/нет), а счетчик на 0-1-2. Т.е., по два бита на элемент. В общей сложности хватит 512 мегабайт, не так уж и много по нонешним временам. Но можешь и по байту отвести для простоты, тогда понадобится 2 гигабайта.

Дальше, идешь по своему массиву целых, для каждого очередного числа смотришь на евонный счетчик. Если там 0, кладешь туда 1. Если 1, выводишь число, как найденное повторное, и кладешь туда 2. Если уже 2, ничего уже больше не делаешь.

А вообще, своими мозгами надо учиться думать, а не искать помощи в форуме.
Re: Алгоритм
От: Senyai Россия http://www.arseniy.net
Дата: 10.03.22 20:46
Оценка: -1
Здравствуйте, Kleo, Вы писали:

K>Помогите написать алгоритм:

K>Есть массив M с типом int32, в массиве N элементов. N – очень много.
K>Есть комп. с неограниченным объемом памяти. Память можно использовать любым образом.
K>Вопрос:
K>Циклом в один проход найти 2 и более повторяющихся элементов.

Практически без выделения памяти можно сделать:
arr = [7, 2, 8, 4, 3, 3, 0, 2, 1]
arr_size = len(arr)
for i in range(arr_size):
   x = arr[i] % arr_size
   arr[x] = arr[x] + arr_size
   if arr[x] >= arr_size*2:
       print(x)

Выдаст 3, 2
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re[2]: Алгоритм
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.03.22 09:00
Оценка: +1
Здравствуйте, Senyai, Вы писали:

S>Практически без выделения памяти можно сделать:

S>
S>arr = [7, 2, 8, 4, 3, 3, 0, 2, 1]
S>arr_size = len(arr)
S>for i in range(arr_size):
S>   x = arr[i] % arr_size
S>   arr[x] = arr[x] + arr_size
S>   if arr[x] >= arr_size*2:
S>       print(x)
S>

S>Выдаст 3, 2
А что выдаст на
arr = [7, 2, 8, 4, 3, 3, 0, 100, 1]
arr_size = len(arr)
for i in range(arr_size):
   x = arr[i] % arr_size
   arr[x] = arr[x] + arr_size
   if arr[x] >= arr_size*2:
       print(x)

?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Алгоритм
От: Kleo  
Дата: 18.02.22 17:34
Оценка:
Помогите написать алгоритм:
Есть массив M с типом int32, в массиве N элементов. N – очень много.
Есть комп. с неограниченным объемом памяти. Память можно использовать любым образом.
Вопрос:
Циклом в один проход найти 2 и более повторяющихся элементов.
Re: Алгоритм
От: reversecode google
Дата: 18.02.22 17:37
Оценка:
поищите в интернете форумы, там лабы студентам решают бесплатно
Re[2]: Алгоритм
От: Muxa  
Дата: 18.02.22 18:19
Оценка:
У нас есть форум «предложения о работе», пусть там попытает удачу.
Re: Алгоритм
От: Vzhyk2  
Дата: 19.02.22 06:19
Оценка:
K>Вопрос:
K>Циклом в один проход найти 2 и более повторяющихся элементов.
Ну и заводи второй массив в 2 гига со счетчиками. Может set заюзать, памяти меньше время поиска индекса счетчика чуть больше.
Re[2]: Алгоритм
От: Kleo  
Дата: 19.02.22 16:05
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Kleo, Вы писали:


K>>Есть массив M с типом int32, в массиве N элементов. N – очень много.

K>>Есть комп. с неограниченным объемом памяти. Память можно использовать любым образом.
K>>Вопрос:
K>>Циклом в один проход найти 2 и более повторяющихся элементов.

Pzz>Ну если памяти неограниченно, заведи массив из 2^32 флагов. Вернее, тебе потребуется не битовый флаг (да/нет), а счетчик на 0-1-2. Т.е., по два бита на элемент. В общей сложности хватит 512 мегабайт, не так уж и много по нонешним временам. Но можешь и по байту отвести для простоты, тогда понадобится 2 гигабайта.


Pzz>Дальше, идешь по своему массиву целых, для каждого очередного числа смотришь на евонный счетчик. Если там 0, кладешь туда 1. Если 1, выводишь число, как найденное повторное, и кладешь туда 2. Если уже 2, ничего уже больше не делаешь.


Pzz>А вообще, своими мозгами надо учиться думать, а не искать помощи в форуме.

Спасибо
Re[2]: Алгоритм
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 19.02.22 17:11
Оценка:
Здравствуйте, Vzhyk2, Вы писали:

K>>Циклом в один проход найти 2 и более повторяющихся элементов.

V>Ну и заводи второй массив в 2 гига со счетчиками. Может set заюзать, памяти меньше время поиска индекса счетчика чуть больше.

у set логарифмическая сложность, если ты про плюсовый set, как мне показалось. undordered_set — линейный
Маньяк Робокряк колесит по городу
Re[3]: Алгоритм
От: Vzhyk2  
Дата: 19.02.22 17:53
Оценка:
M>у set логарифмическая сложность, если ты про плюсовый set, как мне показалось. undordered_set — линейный
Да пофиг, ты можешь искать или линейно или по дереву (тут будет логарифм).
Re[3]: Алгоритм
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 22.02.22 08:11
Оценка:
Здравствуйте, Marty, Вы писали:

M>undordered_set — линейный


Константный же
Re[4]: Алгоритм
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 22.02.22 08:16
Оценка:
Здравствуйте, Nuzhny, Вы писали:

M>>undordered_set — линейный


N>Константный же


Ну да, эт я облажался
Маньяк Робокряк колесит по городу
Re[3]: Алгоритм
От: Senyai Россия http://www.arseniy.net
Дата: 23.03.22 10:27
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Senyai, Вы писали:


S>>Практически без выделения памяти можно сделать:

S>>
S>>arr = [7, 2, 8, 4, 3, 3, 0, 2, 1]
S>>arr_size = len(arr)
S>>for i in range(arr_size):
S>>   x = arr[i] % arr_size
S>>   arr[x] = arr[x] + arr_size
S>>   if arr[x] >= arr_size*2:
S>>       print(x)
S>>

S>>Выдаст 3, 2
S>А что выдаст на
S>
S>arr = [7, 2, 8, 4, 3, 3, 0, 100, 1]
S>arr_size = len(arr)
S>for i in range(arr_size):
S>   x = arr[i] % arr_size
S>   arr[x] = arr[x] + arr_size
S>   if arr[x] >= arr_size*2:
S>       print(x)
S>

S>?
Да, точно, не стоило мне ночью отвечать. Спасибо, что указали на ошибку. Если повезёт, вспомню алгоритм и напишу.
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.