Имеется задание такого вида: Мой код:
#include #include #define MAX_H 32 #define M 101 #define hashing(A) A % M #define TUZ 1000 #define KVA 1000000000000000 struct node < struct node *child [2]; long long info; char balance; >; struct tree < struct node *root; short size; >; struct tree *init_tree (void); struct node *new_node (struct tree *, long long ); struct node *search (struct tree*, const long long ); void turn (struct node **); struct node *insert (struct tree *, long long ); struct node *del (struct node *); struct tree *del_tree (struct tree *); int rm (struct tree *, long long ); int main (void) < FILE *input = NULL; FILE *output = NULL; struct tree *arr [M] = <>; int N = 0; long long X = 0; short A = 0, Ac = 0, Ad = 0; long long B = 0, Bc = 0, Bd = 0; if ((input = fopen («input.txt», «r»)) == NULL) < printf («ERROR of open file input.txtn»); exit (EXIT_FAILURE); >fscanf (input, «%i %lli %hi %lli», X, B); fscanf (input, «%hi %lli %hi %lli», Bc, Bd); if (fclose (input) != 0) < printf («ERROR of exit from file input.txtn»); exit (EXIT_FAILURE); >for (int i = 0; i < M; ++i) < arr [i] = init_tree (); >for (int i = 0; i < N; ++i) < if (search (arr [hashing (X)], X)) < A = (A + Ac) % TUZ; B = (B + Bc) % KVA; >else < insert (arr [hashing (X)], X); A = (A + Ad) % TUZ; B = (B + Bd) % KVA; >X = (X * A + B) % KVA; > if ((output = fopen («output.txt», «w»)) == NULL) < printf («ERROR of open file ouput.txtn»); exit (EXIT_FAILURE); >fprintf (output, «%lli %hi %lli», X, A, B); if (fclose (output) != 0) < printf («ERROR of exit from file ouput.txtn»); exit (EXIT_FAILURE); >for (int i = 0; i < M; ++i) < arr [i] = del_tree (arr [i]); >return EXIT_SUCCESS; > struct tree *init_tree (void) < struct tree *tree = malloc (sizeof *tree); tree->root = NULL; tree->size = 0; return tree; > struct node *new_node (struct tree *n_tree, long long item) < struct node *new = malloc (sizeof *new); if (new) < new->child [0] = new->child [1] = NULL; new->info = item; new->balance = 0; n_tree->size++; > return new; > struct node *insert (struct tree *in_tree, long long element) < struct node *in_node = in_tree->root; struct node **new = root; struct node **array [MAX_H] = <>;//массив хранящий указатели на все пройденные ноды short dirs [MAX_H] = <>;//массив хранящий направления движения short count = 0; for (;;) < if (!in_node) < in_node = *new = new_node (in_tree, element); break; >else if (in_node->info == element) return NULL; else < array [count] = new; dirs [count] = element >in_node->info; new = child [dirs [count]]; in_node = in_node->child [dirs [count]]; count++; > > if (in_node count) = 0; —i) < if ((*array [i])->balance) balance = (dirs [i]) ? (*array [i])->balance — 1 : (*array [i])->balance + 1;//происходит изменение баланса в зависимости от направления if (abs ((*array [i])->balance) == 2)//выполняется поворот если надо turn (array [i]); if (!(*array [i])->balance)//если баланс оказался равен 0, то дальнейшие корректировки не нужны break; > else//если баланс узла был равен 0, то он изменяется в зависимости от направления (*array [i])->balance = (dirs [i]) ? -1 : 1; > > return in_node; > int rm (struct tree *rm_tree, long long element) < struct node *rm_node = rm_tree->root; struct node **q = root; struct node **array [MAX_H] = <>;//тоже что и во вставке short dirs [MAX_H] = <>; short count = 0; for (;;) < if (!rm_node) return 1; else if (rm_node->info == element) break; else < array [count] = q; dirs [count] = element >rm_node->info; q = child [dirs [count]]; rm_node = rm_node->child [dirs [count]]; count++; > > if (!rm_node->child [0]) < *q = rm_node->child [1]; > else < struct node *y = rm_node->child [0]; dirs [count] = 0;//в этом случае создание массива продолжается array [count] = q;//в массив вводится указатель на удаляемую ноду, которая будет заменена другой count++; if (!y->child [1]) < y->child [1] = rm_node->child [1]; y->balance = rm_node->balance;//удаляемая нода изменяется, но баланс остается *q = y; > else < struct node *x = y->child [1]; short px = 0; px = count; dirs [count] = 1;//дополнение в массив указателей происходит ниже count++; while (x->child [1]) < dirs [count] = 1; array [count] = child [1]; count++; y = x; x = x->child [1]; > y->child [1] = x->child [0]; x->child [0] = rm_node->child [0]; x->child [1] = rm_node->child [1]; array [px] = child [0];//вот оно, так как именно эта нода заменяет собой удаляемую x->balance = rm_node->balance; *q = x; > > for (int i = count — 1; i >= 0; —i) balance) < (*array [i])->balance = (dirs [i]) ? (*array [i])->balance + 1 : (*array [i])->balance — 1; if (abs ((*array [i])->balance) == 2) turn (array [i]); > else (*array [i])->balance = (dirs [i]) ? 1 : -1; if ((*array [i])->balance) break; > rm_tree->size—; free (rm_node); rm_node = NULL; return 0; > struct node *search (struct tree *stree, const long long value) < struct node *snode = stree->root; if (!snode) return NULL; while (value != snode->info) < snode = snode->child [value > snode->info]; if (!snode) break; > return snode; > void turn (struct node **tnode) < struct node *b = NULL;//балансируемый узел struct node *a = NULL;//ребенок балансируемого узла struct node *c = NULL;//ребенок узла а struct node *beta = NULL;//подветка узла с struct node *hama = NULL;//подветка узла с или а b = *tnode; short dir = (b->balance < 0);//направление short mod = (dir) ? 1: -1;//модификатор, зависящий от направления switch (b->child [dir]->balance * mod) child [dir]; hama = a->child [!dir]; a->child [!dir] = b; b->child [dir] = hama; *tnode = a; switch (a->balance * mod) < case -1: b->balance = 0; a->balance = 0; break; case 0: b->balance = -1 * mod; a->balance = 1 * mod; break; > break; case 1: a = b->child [dir]; c = a->child [!dir]; beta = c->child [!dir]; hama = c->child [dir]; c->child [dir]= a; c->child [!dir]= b; a->child [!dir]= hama; b->child [dir]= beta; *tnode = c; switch (c->balance * mod) < case -1: b->balance = 1 * mod; a->balance = 0; c->balance = 0; break; case 0: b->balance = 0; a->balance = 0; c->balance = 0; break; case 1: b->balance = 0; a->balance = -1 * mod; c->balance = 0; break; > break; default: break; > return; > struct tree *del_tree (struct tree *rTree) < rTree->root = (rTree->root) ? del (rTree->root) : NULL; rTree->size = 0; free (rTree); return NULL; > struct node *del (struct node *rNode) < for (int i = 0; i < 2; ++i) < rNode->child [i] = (rNode->child [i]) ? del (rNode->child [i]) : NULL; > free (rNode); return NULL; >
Вкратце: я использую массив указателей на avl-деревья в качестве таблицы, при добавлении элемента ячейка массива находится с помощью хэширования,после чего в дерево вставляется значение. Но, программа кушает слишком много памяти: при n = 10000000, x = 0, a = 1, b = 2147483648 расход где-то 320 мегабайт, что не укладывается в условие (256). Подскажите как уменьшить расход?
Это предустановленное приложение занимало 500 МБ памяти и 400 МБ оперативки. ❌ Удалил без раздумий
Отслеживать
задан 14 янв 2018 в 17:43
Andrej Levkovitch Andrej Levkovitch
8,009 2 2 золотых знака 16 16 серебряных знаков 42 42 бронзовых знака
Инициализаторы вида = <>; не поддерживаются в стандартном С.
14 янв 2018 в 19:35
Всмысле? С чего это вдруг?
14 янв 2018 в 19:39
В С нет и никогда не было = <> (именно с пустыми скобками). Это чисто С++-ная фишка.
14 янв 2018 в 20:06
Кстати, а приведите полные входные данные. Вы пока привели только первую строчку.
14 янв 2018 в 20:09
Зачем тут вообще деревья? используй обычный массив для разрешения коллизий; и будет тебе счастье. хэш конечно в кучу переложить нужно и сделать его нормального размера.
Источник: ru.stackoverflow.com
Как уменьшить потребление оперативной памяти в Windows 10
Чем дальше развивается компьютерная индустрия, тем больше оперативной памяти требуется для стабильной работы приложений. Еще несколько лет назад 4 или 8 Гб оперативной памяти казались огромной цифрой, которой достаточно для стабильной работы компьютера даже с тяжелыми приложениями, тогда как сейчас 4 Гб компьютер может использовать при выполнении простейших задач — например, при работе с браузером. “Аппетиты” разработчиков приложений к оперативной памяти значительно возросли, а вместе с тем и операционная система начала потреблять значительно больше ОЗУ. В рамках данной статьи рассмотрим, как уменьшить потребление оперативной памяти системными и сторонними приложениями на компьютере под управлением операционной системы Windows 10.
Оглавление: Отключение “шпионских” служб и дополнительной функциональности Отключение Superfetch Отключение “лишних” служб Снижение нагрузки на оперативную память со стороны браузера Автоматическая очистка оперативной памяти
Отключение “шпионских” служб и дополнительной функциональности
Операционная система Windows 10 постоянно развивается. В ней появляются новые функции, некоторые из которых доступны для американского и европейского рынка, но не работают в России. При этом, данные функции активно потребляют ресурсы компьютера, в том числе и оперативную память, постоянно работая в фоновом режиме.
Одним из примеров, который можно рассмотреть, является голосовой помощник Кортана. Она не разговаривает на русском языке, при этом ее службы работают, в том числе, и в русской версии операционной системы Windows 10. Отключив их, можно снизить потребление оперативной памяти со стороны Windows. Есть и масса других утилит, которые потребляют оперативную память, но при этом не используются большинством пользователей: Windows Defender, Windows Updater, Voice Recorder, Xbox и многое другое.
Также операционная система Windows 10 славится наличием немалого количества приложений “шпионского характера”. Это процессы, которые собирают сведения о работе пользователя с компьютером. На сбор данных сведений пользователь соглашается после установки операционной системы, и они постоянно работают в фоновом режиме, потребляя оперативную память. Для снижения нагрузки на оперативную память, рекомендуется отключить так называемые службы телеметрии.
Все рассмотренные выше программы можно отключить самостоятельно, используя утилиту “Службы”, оптимизировав список процессов автозагрузки и покопавшись в настройках Windows 10 с целью деактивации ненужных функций. Но еще проще это сделать при помощи приложения Destroy Windows 10 Spying.
Это приложение распространяется бесплатно. У него понятный интерфейс (есть русский язык). Приложение позволяет удалить лишние системные программы с компьютера, а также оптимизировать работу служб и утилит.
Важно: Перед использованием приложения Destroy Windows 10 Spying рекомендуется создать точку восстановления и убедиться, что имеется резервная копия системы.
Стоит отметить, что рассматриваемая программа способна деактивировать “лишнюю” функциональность не только самой операционной системы Windows, но и пакета офисных приложений Office 2016, который также собирает телеметрию пользователя.
Отключение Superfetch
Одна из функций Windows 10, которая может расходовать значительное количество оперативной памяти, это Superfetch. Данная служба занимается хранением в ОЗУ компьютера сведений о приложениях, службах, процессах и прочем. На компьютере с достаточной мощностью она способна повысить его скорость работы. Но при ограниченной оперативной памяти лучше ее отключить.
Чтобы выключить Superfetch, откройте список служб Windows. Проще всего это сделать, если в поиске вписать “Службы”. И запустить найденное приложение.
Отыщите в списке служб Superfetch, нажмите на нее дважды левой кнопкой мыши, после чего выберите в пункте “Тип запуска” вариант “Отключена”. Сохранить изменения и перезагрузите компьютер.
Отключение “лишних” служб
Помимо рассмотренных выше “шпионских” служб, в фоновом режиме Windows 10 работает еще огромное число различных других служб, большая часть из которых никогда не используются. При этом они потребляют ресурсы компьютера, в том числе и оперативную память. Чтобы уменьшить использование оперативной памяти со стороны Windows 10, можно отключить все (или некоторые) эти службы.
Отключение служб в ручном режиме может привести к возникновению проблем в работе системы. Оптимальный способ — использовать приложение Easy Service Optimizer. Оно позволяет в пару кликов приостановить работу “лишних” служб и процессов.
Программа Easy Service Optimizer при запуске проводит анализ Windows, после чего предлагает пользователю выключить службы, которые она посчитает “лишними”. При этом приложение предлагает 3 варианта работы: безопасный, оптимальный и экстрим. В зависимости от выбранного варианта, будет меняться число отключаемых служб.
Чтобы отключить службы, которые программа считает неэффективными, достаточно сверху нажать на кнопку “Применить настройки к отмеченным службам”, предварительно выбрав один из режимов.
Снижение нагрузки на оперативную память со стороны браузера
Одним из главных потребителей оперативной памяти в компьютере является браузер. При этом не важно какой именно — Google Chrome, Microsoft Edge, Яндекс Браузер, Opera или любой другой. Все эти браузеры сильно потребляют оперативную память, во многом, из-за “тяжелых” сайтов, но часто и из-за собственных процессов.
Чтобы уменьшить потребление оперативной памяти со стороны браузера, можно воспользоваться встроенными опциями. В зависимости от браузера, меняется список настроек, которые нужно отключить (или включить) для снижения потребления ОЗУ. Например, в Google Chrome без потери качества работы браузера можно отключить сервисы отправки сведений в Google.
В браузере Яндекс имеются настройки “Оптимизировать изображения” и “Выгружать из памяти неактивные вкладки”. Их активация также позволяет снизить потребление оперативной памяти.
Не стоит забывать и о различных внешних украшениях. Например, анимационный фон, который работает в Яндекс Браузере по умолчанию, также потребляет большое количество оперативной памяти. Стоит его отключить, если имеется нехватка ОЗУ.
Обратите внимание: Для оптимизации работы браузера также можно использовать некоторые сторонние расширения, например, OneTab или TabMemFree.
Автоматическая очистка оперативной памяти
Если даже после всех проведенных выше работ по оптимизации компьютера памяти катастрофически не хватает, можно воспользоваться приложением, которое будет принудительно очищать ОЗУ от хранящихся данных. Программа, которая способна это делать, называется Mem Reduct.
После установки приложения, пользователь сможет всегда контролировать потребление оперативной памяти. В нижней панели управления постоянно будет отображаться информация о процентном количестве задействованной памяти.
Если требуется очистить оперативную память, можно открыть программу и нажать “Очистить память”. Также в настройках приложения можно установить “горячую клавишу” для мгновенной очистки оперативной памяти, либо настроить параметры, при которых программа автоматически будет очищать память, например, при загрузке ОЗУ выше 90% или каждый час.
При работе программа Mem Reduct вычищает из памяти системный кеш. Соответственно, на работе текущих приложений на компьютере это никак не сказывается.
Источник: okeygeek.ru
Как уменьшить потребление памяти дискордом
Будь в курсе последних новостей из мира гаджетов и технологий
iGuides для смартфонов Apple
Как снизить потребление RAM в Windows на 2 ГБ? Очень легко!
Александр Кузнецов — 1 мая 2022, 15:00
Windows 10 потребляет около 300 мегабайт оперативной памяти, однако с запущенными сервисами телеметрии потребление RAM вырастает в несколько раз — примерно до 2 гигабайт. Эти сервисы можно отключить, тогда система освободит ресурсы, благодаря чему можно комфортно использовать даже слабые устройства — с 2 или 4 ГБ оперативной памяти.
Windows очень прожорлива — этой ОС зачастую не хватает даже 8 ГБ RAM, а работа на планшетах и ноутбуках с меньшим объёмом памяти превращается в мучение — стоит открыть в Chrome всего несколько вкладок, как браузер вылетает. Все последние версии Windows (7, 8 и 10) используют сервисы телеметрии для отслеживания и изучения действий пользователя. Для Microsoft эти данные очень ценны, но пользователям они только мешают.
Как это отключить слежку и высвободить RAM? Проще всего — с помощью программы Destroy Windows 10 Spying (DWS_Lite), которую можно скачать с GitHub. Программа портативная, то есть не требует установки.
1 Скачайте DWS_Lite, запустите и перейдите во вкладку «Настройки».
2. Нажмите «Включить профессиональный режим» и оставьте галочку у «Отключить кейлоггер и телеметрию».
3. Если у вас установлен Office 2016, зайдите во вкладку «Утилиты» и нажмите «Отключить Office 2016 Telemetry».
4. Перейдите во вкладку «Главное» и нажмите «Destroy Windows 10 Spying».
5. Перезагрузите компьютер. Если всё было сделано правильно, вы заметите, что потребление оперативной памяти снизилось примерно на 2 гигабайта.
В некоторых случаях этого может оказаться недостаточно. Дело в том, что Windows 10 после установки очередного обновления иногда восстанавливает телеметрию. Придётся периодически запускать DWS_Lite и снова отключать сервисы, отвечающие за слежку, либо, как вариант, можно отключить Windows Update (во вкладке «Утилиты») — тогда обновления ОС перестанут приходить.
Частично обезопасить себя от повторной активации телеметрии можно, выбрав в настройках DWS_Lite дополнительные пункты: «Отключить Windows Defender» (желательно при наличии стороннего антивируса), «Отключить шпионские задачи», «Добавить шпионские домены в hosts». Это позволит вам запретить Windows 10 отправлять данные на сервера Microsoft, но может создать проблемы для работы некоторых сервисов и приложений, в том числе «Магазина Windows».
Metro-приложения можно не удалять, если они вам не мешают. Они не нагружают оперативную память, хотя и занимают место на накопителе.
Cсылки по теме:
Будь в курсе последних новостей из мира гаджетов и технологий
Мы в соцсетях
Будь в курсе последних новостей из мира гаджетов и технологий
Комментарии
Добавить комментарий
Я думаю это только для вин10 актуально, и вин8, в семёрке это если высвободит что-то, то очень мало.
1 января 2017 в 12:56 0
с выходом 10ки майки навыпускали патчей и для 7-8 винд, которые насовали шпионов ;)))
сама по себе телеметрия в разном виде была и в 7ке, потом в 8ке она стала более продвинутой, но почему-то только после выхода 10ки подняли такую шумиху.
1 января 2017 в 23:44 +3
Когда поставил винду 10 — первый месяц нормально было.
Потом начало грузить по пол дня все 100% и памяти и цп.
Использовал дестрой виндовс — все функции, нагрузка исчезла и норм стало. Только блокировка адрессов винды не работает, регулярно что то высылает по инету, а стоит заблокировать адресса в роутере — как Рут киты начинает забивать всю память на ноуте, 10ка истинная вирусня
19 февраля 2018 в 22:55 –2
Буду пробовать, спасибо за статью !
1 января 2017 в 14:26 0
Согласен. Классная и полезная утилита!
3 января 2017 в 09:35 0
Сделал все как написано. До этого система занимала 1,6 гб оперативы. После использования данной программы стала занимать 1,6 гб. Так что дизлайк заработали честно.
1 января 2017 в 17:28 +5
У меня на ноуте 4Gb и пока я не замечал нехватки памяти, если конечно не держать кучу программ в трее.
За статью в любом случаи спасибо, познавательно.
1 января 2017 в 17:48 +1
Помогло , было 2-2,5. А стало 1,2
1 января 2017 в 18:20 0
А может все дело в перезагрузке?
2 января 2017 в 04:57 +1
8 августа 2019 в 12:09 0
Не помогло 🙁
1 января 2017 в 18:51 0
Ребята не туристов!! Если у вас все это выключено то это не поможет!! Ели винда занимает ОЗУ не больше 1,2-1,6 Gb. то даже пробовать не надо. Если что это все ручками отключается.
На скрине же видно ОЗУ >5 Gb. Вот тогда резать надо за беспредел Майкрософтовсуий)))
1 января 2017 в 22:34 –1
Не помогло.
1 января 2017 в 22:55 0
Млин, как достали умники — один глупый сказал, а остальные как попугаи повторяют, не задумываясь о достоверности. Да возьмите наконец любой свитч с port-mirroring + wireshark и посмотрите, что на самом деле передаётся.
PS: поделки Apple передают гораздо более интересную информацию и в бОльших количествах, но при этом все молчат «в тряпочку». Про Android говорить не буду — не проверял.
2 января 2017 в 00:16 +7
Задолбал уже со своим пустым свистом.
3 января 2017 в 19:25 –1
Если не понимаешь в этом ничего, лучше помолчи. Микротик тоже хорошо показывает, даже куда всё отсылается.
21 апреля 2019 в 22:34 +3
Подобные советы могут давать только душевнобольные, а следуют им только имбецилы
2 января 2017 в 01:12 +1
Здравствуйте, спасибо за статью и прогу. Всё получилось, реально быстрее в два раза стал комп работать.
2 января 2017 в 09:44 –2
аФФтар, пить вредно, тебе тем паче
2 января 2017 в 14:34 0
Конечно много всякой срани в виндоус 10 которая начинает запускаться когда захочет и комп тупить начинает. Я пользуюсь прогой Oчекеры», «мониторы активности».
2 января 2017 в 18:15 +1
Как винда может жрать почти 6 гигов!? Скорее всего это кривые руки пользователя виноваты. Чем ее так засрать можно? Наверное, всякая херня от яндекса и мейла установлена. А эти программы — херня полная.
Потом всяких багов и проблем повылазить после неё. И опять будут говорить, что винда виновата. У меня при старте система жрет 1,4 гига. так что не поможет эта прога.
2 января 2017 в 20:53 +3
У меня потом глюки хреновые при работе со сторонними программами.
4 января 2017 в 09:57 0
Воспользовавшись данной программой у меня на материнской плате Gigabyte GA-B75-D3V сдох bios и мать перестала включаться
замена платы на аналогичную решила проблему
Так что будьте осторожны !!
4 января 2017 в 12:21 –2
Биос сдох бы у вас и так и так. Эта прога ни причем.
5 января 2017 в 11:48 +1
Не вызвала статья никакого доверия, как и сама программа еще ранее публикации данной статьи..
Что-то мне кажется, что эта программа своим пользователям еще хуже натворить может в будущем, чем уже есть.
Совсем не удивительно будет, если вдруг начнут утекать личные данные уже не к самим «майкам», а вовсе к глубоководным обитателям даркнета.
Вы только взгляните на изображения, сделанные с закосом под скриншоты рабочего стола во время пользования программой и диспетчером задач. Нет, я действительно(почти совсем) молчу про отсутствие на рабочем столе каких-либо ярлыков и панели задач, ведь их можно спрятать.. Но блин, на каждом из скриншотов разный фон рабочего стола! Конечно, можно тоже сказать мол -«там живые обои», или -«там слайд-шоу».
Ведь глупый человек не мамонт, и все это знают(а более умные порой этим еще и пользуются). Ведь все ненужное толковый человек сам отключить способен, без помощи постороннего софта(было-бы желание). Но ведь расчет идет на ленивых, невнимательных и не разбирающихся людей, людей которые являются основным кормом для различных «обитателей» того самого даркнета.
В заключение своего комментария скажу следующее: -Весь выше написанный текст был сходу создан полетом мыслей, которые периодически меня одолевают во время моего глубокого и порой даже бессмысленного брождения по просторам всемирной паутины..
5 января 2017 в 17:39 +2
Подскажите как отменить, пожалуйста(
14 января 2017 в 14:12 0
Если в профессиональном режиме использовали, то только полная переустановка либо возвращение windows к заводским настройкам/исходному состоянию. К примеру в ноутбуках такая функция встроена начиная с windows 8/8.1.
Далее -гугл в помощь.
15 января 2017 в 16:16 0
Некропост, ну да ладно:
1. Фон один и тот же, положение окна программы разное.
2. Это не полный скрин стола а от силы 1/3.
3. В вирустотале только Trapmine и Jiangmin нашли кусок кода, схожего с «чем то опасным». В программе что вырезает хлам мелкомягких без возможности заражения им опять, ага.
4. Попробуй своими лапками удалить ересь по типу магазина, карт, грува и прочего что упорно пытается сбить настройки обратно на себя.
5. Удачи с отключением кейлогера и прочей фигни, что постоянно сбрасывает реестр и возвращается.
Источник: www.iguides.ru