![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Gelos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Собственно, если точно известно, что в потоке данных, размером, эдак гигибайт, состоящим из чисел в 16-ом коде, одно из чисел встречается чаще других с вероятностью >51% Каков самый оптимальный способ найти это число, за минимальное время?
И второй момент, злостные операторы new и delete. В моем случае, вышла ситуация, что не смотря на то, что с выделенной памятью уже не работаю, вызов оператора delete рушит программу начисто. Путем хитрых извращений, а именно, вторай раз выделил на тот же указатель память, и после этого удалил, что то типа: ukaz = new char[razmer]; ----- // работа с выделеной памятью ----- ukaz = new char[razmer]; delete [] ukaz; собственно вопрос, при таком методе действий, когда я вызываю delete то будет очищаться вся память? И на сколько я заметил, второе выделение памяти не затирает информацию хранящуюся после первого вызова new? |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 19 Всего: 50 |
Gelos, Нет, ты получаешь летучего голандца в виде нестертого первого блока памяти. Хотя система его потом должна подтереть, но .. .
Это сообщение отредактировал(а) Xenon - 30.4.2007, 15:07 |
|||
|
||||
| Gelos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Xenon
то есть после вызова delete почистится все? Это сообщение отредактировал(а) Gelos - 30.4.2007, 15:23 |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 19 Всего: 50 |
Gelos, я же тебе говорю - первый раз то, что ты выделил, уйдет в небытие, освободиться только та память, что ты последний раз выделил.
|
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: нет Всего: 15 |
Gelos, так конечно делать не имеет никакого смысла: ты просто выделил новую память, и её же освободил, т.е. ты просто заставил систему выполнить лишние действия и всё. Проблема в другом:
Этого быть не должно, скорее всего ты испортил выделенную память до попытки её освобождения. Если код не слишком большой - приведи его |
|||
|
||||
| Gelos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Xenon,
гм.. интересная ситуация. значит мой "летучий голандец" остается жить в памяти. А с учетом что все в цикле выделяется, да ещё и при данном раскладе не удаляется...
он большой. к сожалению. Но что то в мысли на счет порчи памяти есть. Это сообщение отредактировал(а) Gelos - 30.4.2007, 15:40 |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 19 Всего: 50 |
Gelos, Если тот первый кусок должным образом не удаляется, значит ты его где-то попортил.
Да, остается жить, если у тебя, конечно, сборщика мусора не предусмотрено |
|||
|
||||
| Gelos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Xenon,
ок. бум искать. одно место уже нашел. действительно попортил. Короче, в хорошем тоне, сколько раз вызвал, столько раз и освободил. хорошо. Вроде со вторым вопросом помогли. пасиб ^__^" |
|||
|
||||
| apook |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 10 Всего: 23 |
Это надо волнообразно циклом туда сюда Метод придуманный дядей Шеллом в 50-х годах прошлого века
Вот поправил конечно же 10/2 в условии т.е в два раза меньше проходов Это сообщение отредактировал(а) apook - 30.4.2007, 20:34 -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
||||
|
|||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
побитово: решаем независимо задачу нахождения каждого бита этого числа... а сами проходы можно объединить в один... -------------------- qqq |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 11 Всего: 360 |
Модератор: Название темы не отражает ее суть, или несколько вопросов в одном топе!
Ознакомьтесь с правилами форума!: http://forum.vingrad.ru/index.php?showtopic=96391 |
|||
|
||||
| Gelos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
maxim1000,
Мы не знаем что это за число. нам его определить нужно. apook, А немного пояснить алгоритм, если не трудно? Вложенные циклы "управляются " из главного. Массив из чисел. Только, на сколько я заметил, они там все по 1 экзмепляру. Плюс немного не понятно все таки система вложенности циклов. что там во что вложено? |
|||
|
||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 10 Всего: 23 |
Суть в следующем:
Есть количество цифер которые надо проверить, это значит что надо сверить каждое число со всеми числами массива. Задача делать как можно меньше лишних движений алгоритм Шелла (вообще это алгоритм сортировки), так вот он заключается в проходах взад вперед по массиву причем каждый раз ко-во сравниваемых элементов уменьшается на один вконце и на один вначале т.к в них отпадает необходимость(ведь они уже проверены) Если использовать вывод то это выглядит так: Смотри внимательно:
-------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| Gelos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
apook,
То есть мы берем элемент с начала и сравниваем его со всеми элементами из последовательности.. Хм, ладно, как сформулирую запрос, то напишу. Сейчас сразу безполезно. |
|||
|
||||
| apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 10 Всего: 23 |
Имей ввиду это черновой вариант, его еще надо оптимизировать
так навскидку набросал.... -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
найдём старший бит числа
нам известно, что само число встречается > 51% (если я правильно понял) значит значение его старшего бита встречается не меньше (даже, возможно, больше, т.к. такой же старший бит может оказаться и в других числах) так что просто пробегаемся по всему массиву, смотрим на все старшие биты, кого больше 0 или 1 кого больше - то и является старшим битом искомого числа аналогично можно найти остальные биты... -------------------- qqq |
|||
|
||||
| Gelos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
maxim1000, Благодарю, мессир, этот алгоритм, тоже выглядит многообещающим.Есть над чем подумать.
|
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 50 Всего: 88 |
Если массив неотсортирован, то нужно сделать быструю сортировку. И искомое число будет иметь индекс N / 2 + 1, где N - это размер массива. Всё.
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 13 Всего: 31 |
Dov,
{ 1, 0, 2, 0, 3, 0, 4, 5, 6, 7, 8, 9, 10 } -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 50 Всего: 88 |
Rockie, 1 : 1.
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 13 Всего: 31 |
Dov, в этом нет необходимости
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |