Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/86: Рейтинг темы: голосов - 86, средняя оценка - 4.52
 Аватар для Veseliy Hakker
0 / 1 / 0
Регистрация: 23.01.2018
Сообщений: 148

Исправить алгоритм расчета ЕИ и максимально оптимизировать с целью повышения быстродействия

02.11.2019, 15:45. Показов 17841. Ответов 58

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Помогите выполнить тестовое задание. Условия:

Запрос от Министерства энергетики Нской области:

Добрый день!

Нужно срочно решить проблему с пересчетом показателей!

Делали все по инструкции:
Заполнили обе таблицы перевода единиц измерения (см. вложения "Таблица конвертации ЕИ", "Таблица мультипликации ЕИ").
В таблицу значений внесли данные по совокупному конечному энергопотреблению природного газа с 2017 по 2021 годы в единице измерения Mtoe.
Запустили расчет.
Данные рассчитались некорректно – значения в Twh отличаются от Gwh на 2 порядка (см. вложение "Данные TFC"), а не на 3, как должно быть. При этом в таблице перевода цифры правильные – степень Gwh -9, степень Twh -12, разница -3. В таблице "Данные TFC" для наглядности оставил только исходные значения в Mtoe и значения в Gwh и Twh, рассчитанные некорректно. В значениях, рассчитанных в остальных единицах измерения, ошибок не нашел, поэтому убрал их из таблицы "Данные TFC".

Прошу срочно исправить алгоритм расчета (см. вложение "Алгоритм расчета ЕИ").

Также прошу максимально оптимизировать алгоритм расчета с целью повышения быстродействия.

--
В.В. Васильев
Ведущий специалист отдела перспективного развития
Министерства энергетики Нской области
(000) 00-00-00


Дополнительные материалы:

Алгоритм расчета ЕИ

1 Начало расчета:
2 Получить P_indicators – параметр запуска расчета, массив записей таблицы T_indicators;
3 Получить P_resources – параметр запуска расчета, массив записей таблицы T_resources;
4 Получить P_years – параметра запуска расчета, массив записей таблицы T_years;
5 Для очередного показателя I из P_indicators:
5.1. Для очередного ресурса R из P_resources:
5.1.1. Для очередного года Y из P_years:
5.1.1.1. Получить M_values – массив записей T_values, каждая из которых удовлетворяет
условию [[Значение поля «Показатель» = I] и [Значение поля «Ресурс» = R] и [Значение
поля «Год» = Y]];
5.1.1.2. Получить M_calculated – массив записей T_multiplication, каждая из которых
удовлетворяет условию [[Значение поля «Базовая ЕИ» содержится в поле «Единица
измерения» какой-либо записи M_values] и [Значение поля «Расчетная ЕИ» не
содержится в поле «Единица измерения» записей M_values]];
5.1.1.3. Получить M_based – массив записей T_multiplication, каждая из которых
удовлетворяет условию [[Значение поля «Расчетная ЕИ» содержится в поле «Единица
измерения» какой-либо записи M_values] и [Значение поля «Базовая ЕИ» не содержится
в поле «Единица измерения» записей M_values]];
5.1.1.4. Получить M_result – массив записей T_convertation, каждая из которых
удовлетворяет условию [[Значение поля «Исходная ЕИ» содержится в поле «Единица
измерения» какой-либо записи M_values] и [Значение поля «Результирующая ЕИ» не
содержится в поле «Единица измерения» записей M_values]];
5.1.1.5. Если [[M_calculated пусто] и [M_based пусто] и [M_result пусто]], то перейти в 5.1.2,
иначе перейти в 5.1.1.5.1:
5.1.1.5.1. Если [M_calculated пусто], то перейти в 5.1.1.5.2, иначе перейти в 5.1.1.5.1.1:
5.1.1.5.1.1. Для каждой записи M_values, у которой значение поля «Единица
измерения» содержится в поле «Базовая ЕИ» записей M_calculated, рассчитать
значения в единицах измерения, которые содержатся в поле «Расчетная ЕИ»
соответствующих записей M_calculated по формуле: [Значение в расчетной ЕИ
= Значение в базовой ЕИ * 10 E];
5.1.1.5.1.2. Записать в T_values для I, R, Y все значения, рассчитанные в
расчетных единицах измерения, перейти в 5.1.1.5.2;
5.1.1.5.2. Если [M_based пусто], то перейти в 5.1.1.5.3, иначе перейти в 5.1.1.5.2.1:
5.1.1.5.2.1. Для каждой записи M_values, у которой значение поля «Единица
измерения» содержится в поле «Расчетная ЕИ» записей M_based, рассчитать
значения в единицах измерения, которые содержатся в поле «Базовая ЕИ»
соответствующих записей M_based по формуле: [Значение в базовой ЕИ =
Значение в расчетной ЕИ * 10 –E];
5.1.1.5.2.2. Записать в T_values для I, R, Y все значения, рассчитанные в базовых
единицах измерения, перейти в 5.1.1.5.3;
5.1.1.5.3. Если [M_result пусто], то перейти в 5.1.1.1, иначе перейти в 5.1.1.5.3.1:
5.1.1.5.3.1. Для каждой записи M_values, у которой значение поля «Единица
измерения» содержится в поле «Исходная ЕИ» записей M_result, рассчитать
значения в единицах измерения, которые содержатся в поле «Результирующая
ЕИ»
соответствующих
записей
M_result
результирующей ЕИ = Значение в исходной ЕИ * K];
5.1.1.5.3.2. Записать в T_values для I, R, Y все значения, рассчитанные в
результирующих единицах измерения, перейти в 5.1.1.1;
5.1.2. Если по всем Y из P_years расчет завершен, то перейти в 5.2, иначе перейти в 5.1.1;
5.2. Если по всем R из P_resources расчет завершен, то перейти в 6, иначе перейти в 5.1;
6 Если по всем I из P_indicators расчет завершен, то перейти в 7, иначе перейти в 5;
T_indicators – таблица показателей, содержит поле «Наименование».
T_resources – таблица ресурсов, содержит поле «Наименование».
T_years – таблица календарных лет, содержит поле «Наименование».
T_values – таблица значений, содержит поля: «Показатель», «Ресурс», «Год», «Единица измерения»,
T_multiplication – таблица мультипликации единиц измерения, содержит поля: «Наименование»,
«Базовая ЕИ», «Расчетная ЕИ», «Степень».
T_convertation – таблица конвертации единиц измерения, содержит поля: «Наименование»,
«Исходная ЕИ», «Результирующая ЕИ», «Коэффициент».
E – степень мультипликации, поле «Степень» в T_multiplication.
K – коэффициент конвертации, поле «Коэффициент» в T_convertation.


Данные TFC

Энергетический ресурс Единица измерения Совокупное конечное энергопотребление (Total final consumption)
2017 2018 2019 2020 2021
Природный газ
(Natural gas) Mtoe 148,67 149,33 150,00 150,67 151,33
Gwh 172 903,22 173 670,80 174 450,01 175 229,22 175 996,80
Twh 1 729,03 1 736,71 1 744,50 1 752,29 1 759,97

Таблица конвертации ЕИ

Наименование Исходная ЕИ Коэффициент Результирующая ЕИ
Mtce --> Mm3ng Mtce 751,4768963 Mm3ng
Gft3ng --> Twh Gft3ng 0,301277062 Twh
MMbtu --> Mj MMbtu 1055,060005 Mj
Bboe --> Qbtu Bboe 0,58000001 Qbtu
Gtoe --> Gtce Gtoe 1,4285714 Gtce
Gj --> Gwh Gj 0,000277778 Gwh
Ktoe --> Kboe Ktoe 6,8419054 Kboe
Gm3ng --> Gft3ng Gm3ng 35,958043 Gft3ng

Таблица мультипликации ЕИ

Наименование Расчетная ЕИ Степень Базовая ЕИ
Gft3ng <--> ft3ng Gft3ng -9 ft3ng
Gtce <--> tce Gtce -9 tce
Gtoe <--> toe Gtoe -9 toe
MMbtu <--> btu MMbtu -6 btu
Mj <--> j Mj -6 j
Kboe <--> boe Kboe -3 boe
Mtoe <--> toe Mtoe -6 toe
Twh <--> wh Twh -12 wh
Ktoe <--> toe Ktoe -3 toe
Gj <--> j Gj -9 j
Mboe <--> boe Mboe -6 boe
Mtce <--> tce Mtce -6 tce
Gm3ng <--> m3ng Gm3ng -9 m3ng
Bboe <--> boe Bboe -9 boe
Qbtu <--> btu Qbtu -15 btu
Mm3ng <--> m3ng Mm3ng -6 m3ng
Mft3ng <--> ft3ng Mft3ng -6 ft3ng
Gwh <--> wh Gwh -9 wh

Собственно, это тестовое задание при приеме на работу в компанию X, оно у них не меняется на протяжении 3 лет и подходит для любой вакансии практически. Поэтому решил выставить на всеобщее обозрение. Сразу скажу, что подобное задание я уже выполнял и, как ни странно, принят на работу не был. Поэтому решил узнать - в чем тут собственно подвох? Помогите пожалуйста решить данное задание.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.11.2019, 15:45
Ответы с готовыми решениями:

Способы повышения быстродействия ключа
Какие есть способы повышения быстродействия?

Настройка ПК с целью повышения FPS
Я являюсь полу про-геймером. Процессор Intel® Core™ i5 CPU 650 @ 3.20GHz Видеокарта Saphire AMD Radeon R9 200 Series 2GB Оперативная...

Апгрейд компьютера, с целью повышения производительности в играх
Всем привет!) Подскажите, что улучшить в моем компьютере, чтоб шли игры, которые имеют системные требования, как AC:Unity, BF4 и...

58
0 / 1 / 0
Регистрация: 16.11.2019
Сообщений: 2
16.11.2019, 17:02
Студворк — интернет-сервис помощи студентам
Veseliy Hakker, если Вы разобрались, помогите и мне. Где здесь ошибка в расчете? И как можно оптимизировать алгоритм? Мне не нужен код, просто в словах. Я не на должность программиста в эту компанию хочу))
0
 Аватар для Veseliy Hakker
0 / 1 / 0
Регистрация: 23.01.2018
Сообщений: 148
17.11.2019, 00:55  [ТС]
Aleks-stack, Не помню...

Добавлено через 40 минут
Если тупо, то читаем условие. Там написана разница, которая должна быть. Находим рассчет этого значения в коде. Но! Перед тем как считать эти значения, нужно обратить внимание на простую деталь - здесь вложенность циклов, влияет ли она на результат работы программы?

Добавлено через 3 минуты
5.1.1.5.2.1. Для каждой записи M_values, у которой значение поля «Единица
измерения» содержится в поле «Расчетная ЕИ» записей M_based, рассчитать
значения в единицах измерения, которые содержатся в поле «Базовая ЕИ»
соответствующих записей M_based по формуле: [Значение в базовой ЕИ =
Значение в расчетной ЕИ * 10 –E];

Казалось бы, здесь просто нужно умножать на 100, а не на 10. Но нужно посмотреть на условие и данные. Смотрим.

Добавлено через 20 минут
Замечаем такую деталь. Тут везде умножение на 10. А зачем? Допустим, нужно вычислять точные значения и некий коэф нужно учитывать. Тогда зачем в коде дополнительно прописывать еще разрядный множитель? Который и влияет на результаты? Хз правда умножать или делить, так как я уже все удалил и по форуму смотрю. Нужно бы уточнить. По поводу оптимизации кода. Можно ускорить загрузку/выгрузку данных до/после математических методов. Поюсом, во избежание каши, вынести расчеты данных задачи в отдельный блок кода. Матан ускорить вроде никак не получается.

Добавлено через 1 минуту
Короче такие мысли были )

Добавлено через 4 минуты
Aleks-stack, А вообще, глупо так поступать. Зарегаться с целью мне написать? Зачем? Сори за такой ответ, просто как-то странно для новичка на форуме, тем более профильном )

Добавлено через 1 час 58 минут
Написал ответ, обновляю страницу в ожидании, ответа нет. Но время на сообщение есть. Ну я им ссылку на форум скинул, если что. Сейчас угорать будут всей компанией ))) Я сразу в ЧС попаду наверно, с пометкой "Сказочный идиот". На этом форуме меня зачморят тролли по полной программе, а профи перекрестятся пяткой, со словами "в наше время такой х...и никто бы не сморозил". И потом я не смогу устроиться даже дворником на работу ......

Да простит меня модератор, но чет я ощущаю себя мудаком. Хм...
0
0 / 1 / 0
Регистрация: 16.11.2019
Сообщений: 2
17.11.2019, 15:29
Какое умножение на 10? Действительно сказочный вы! Это умножение на 10 в степени -Е (Е - столбец Степень таблицы T_multiplikation). В одном вы правы - зря я зарегился тут, чтоб вам написать, идите лучше в дворники...
1
17.11.2019, 15:45

Не по теме:

Цитата Сообщение от Aleks-stack Посмотреть сообщение
идите
ну, зачем провоцировать на ругань?! мы же не знаем всех обстоятельств его необычного мышления...

0
 Аватар для Veseliy Hakker
0 / 1 / 0
Регистрация: 23.01.2018
Сообщений: 148
17.11.2019, 18:27  [ТС]
Aleks-stack, Вот и раскололся наш орешек ) Как тебе такая аналитика ))) Тоже мне лошка нашел - катись отсюда )))



Добавлено через 1 минуту
Aviz__, Это точно подмечено )

Добавлено через 5 минут
Нокаутирующим ударом КРИТ вылетает с ринга. Проект уходит другой компании на более выгодных условиях ))) Как же я люблю интернет )))

Добавлено через 6 минут
Более всего на свете я не люблю когда меня выставляют идиотом, кроме тех случаев, когда я выставляюсь им сам )))
0
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
17.11.2019, 18:33

Не по теме:

Цитата Сообщение от Veseliy Hakker Посмотреть сообщение
катись отсюда
сам зачем накаляешь?!


а ты то, чего хочешь?! тебя чел искренне спросил, а ты развел лабуду...
1
 Аватар для Veseliy Hakker
0 / 1 / 0
Регистрация: 23.01.2018
Сообщений: 148
17.11.2019, 18:39  [ТС]
Aviz__, Он искренне решил меня обмануть. Искренне зарегистрировался, искренне решил поиздеваться, искренне решил что сможет это сделать - а фиг вам ))) Отправил письмом им в офис ссылку на форум и скрин его ответа - пусть полюбутюся. А теперь я искренне займусь чем-нибудь полезным. Дел полно, нужно допиливать Джарвиса, а я тут фигней страдаю )))

Я им с уважением отправил презентацию проекта. Но, без уважения получил стандартный ответ. В итоге, они сами наступили на свои грабли и получили черенокм по щам, что меня вполне удовлетворяет )
0
1 / 1 / 0
Регистрация: 09.01.2020
Сообщений: 2
09.01.2020, 10:30
Veseliy Hakker, приветствую! только вкатился из консультантов SAP в программирование. заинтересовал ваш пост. можете пояснить, в кратце, в чем проблема в алгоритме в итоге? заранее спасибо.

Добавлено через 33 минуты
Veseliy Hakker, у меня только опыт на ABAP (и то скудный, работа с отладчиком), с НГ начал осваивать Python. готового ответа не прошу, нужна пища для размышлений с:
0
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
09.01.2020, 10:50
Цитата Сообщение от Rem6677 Посмотреть сообщение
начал осваивать Python.
так тут форум по java, дружище!
если ты умеешь читать, то наверное, из 2-х страниц выше, смог понять, что Veseliy Hakker, просто понтился, не более((.
0
1 / 1 / 0
Регистрация: 09.01.2020
Сообщений: 2
09.01.2020, 11:33
отработав несколько лет консультантом, меня интересуют занятные алгоритмы, я в курсе, что форум немного другой) но обратил внимание именно на алгоритм
мой товарищ - опытный программист уже посоветовал мне краш-курс для решения этого задания, вечером засяду
1
 Аватар для Aviz__
2762 / 2069 / 510
Регистрация: 17.02.2014
Сообщений: 9,507
09.01.2020, 11:37
Rem6677, привет товарищу!
да, если решишь и на java, мы будем рады посмотреть. удачи, дружище))
0
 Аватар для Veseliy Hakker
0 / 1 / 0
Регистрация: 23.01.2018
Сообщений: 148
11.01.2020, 01:09  [ТС]
Rem6677, спасибо за помощь ) Там нужно для начала поднять базу данных на JDBC. Вот ссылка на мануал https://www.youtube.com/watch?... TLyUHkTqi2 Потом нужно все посчитать. Точно не помню, но расхождение на порядок получается. На java я решение не писал, так как бросил эту затею ) Но для интереса можно и написать на пару, тем более от гнева я уже отошел )

Добавлено через 1 минуту
Можно просто создать коллекции и в ниж все данные прописать и так работать кстати, не думаю что обязательно работать прямо с БД.
0
1 / 1 / 0
Регистрация: 11.01.2020
Сообщений: 3
11.01.2020, 15:20
Veseliy Hakker, день добрый! В четверг получил такое же задание. Могли бы что ни будь подсказать, я честно понимаю только то что они хотят какие то расчеты что бы я поправил. Вообще что к чему тут? У вас получилось попасть к ним?
1
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
11.01.2020, 18:45
Цитата Сообщение от Veseliy Hakker Посмотреть сообщение
Там нужно для начала поднять базу данных на JDBC
База данных поднимается не на JDBC.

Не вводите людей в заблуждение.

JDBC (англ. Java DataBase Connectivity — соединение с базами данных на Java) — платформенно независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE.
Посмотрите пример из вики: https://ru.wikipedia.org/wiki/... nnectivity
Как соединиться с базой данных и как считывать из неё данные.

Смотрите официальную документацию по JDBC
https://www.oracle.com/technet... index.html

Это намного лучше, чем искать видео на ютубе.
1
 Аватар для Veseliy Hakker
0 / 1 / 0
Регистрация: 23.01.2018
Сообщений: 148
11.01.2020, 22:15  [ТС]
vvm28, ну логично, но управление все равно через JDBС, ок. Так же как и в пыхе есть PDO и в питоне есть SQLitie
Спасибо )

Добавлено через 2 минуты
yurius1, Я отправлял им просто расчеты, не писал программу, но такое выполнение их не устроило. Им нужно написать программу на том языке, на который вы претендуете. Я так понял.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
11.01.2020, 22:18
Veseliy Hakker, если ты имеешь ввиду sqlite - это былинный отказ же
0
1 / 1 / 0
Регистрация: 11.01.2020
Сообщений: 3
11.01.2020, 22:40
Veseliy Hakker, вопрос у меня как раз по расчетам.. Мне это не понятно и сам алгоритм там значение в формулу подставить нужно? Есть может пример одного расчета, буду признателен?
0
 Аватар для Veseliy Hakker
0 / 1 / 0
Регистрация: 23.01.2018
Сообщений: 148
13.01.2020, 11:35  [ТС]
yurius1, появится время - поищу или по-новой сделаю )
0
 Аватар для Veseliy Hakker
0 / 1 / 0
Регистрация: 23.01.2018
Сообщений: 148
20.01.2020, 18:11  [ТС]
yurius1, потерял. Видимо удалил с дуру... Придется по-новой переписывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.01.2020, 18:11

Методы кодирования информации с целью повышения надежности передаваемой информации
Необходимо разработать приложение, с помощью которого можно закодировать информацию. Среда разработки -Visual studio. Язык программирования...

1 ГБайт ОЗУ + Win7 x32 - оптимизировать систему для увеличения быстродействия
Добрый вечер, уважаемые форумчане! У меня мало ОЗУ - 1 ГБ. Я провёл тонкую подстройку Mozilla Firefox в about:config и быстродействие её...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
59
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru