Easyelectronics.ru • Просмотр темы - индицировать данные, поиск кратности.

Easyelectronics.ru

Электроника для всех
Текущее время: 19 авг 2018, 21:52

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: индицировать данные, поиск кратности.
СообщениеДобавлено: 23 фев 2018, 13:29 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 3325
Есть одномерный массив данных.
В нем много чисел, причем некоторые числа являются членами ряда:
a, a*2, a*3, a*4 .... и так далее.
другие:
b, b*2, b*3, b*4 ....
То есть в массиве перемешаны несколько (произвольное количество) кратных рядов. (Могут присутствовать не все числа ряда.)

Эти числа нужно индицировать на одномерной шкале так, чтобы все числа кратного ряда попадали на одну и ту же отметку, числа другого кратного ряда - на другую отметку, каждый на свою, и так далее.
Шкала индицирует присутствие в данных кратных рядов. (Попадание нескольких чисел на одну отметку выделяется ее яркостью. Но это уже детали)

Я сначала думал использовать нелинейную разметку, принцип логарифмической линейки, когда в зависимости от величины a, b, они попадают на участки разного масштаба и таким образом совмещаются каждое с собой, но это не прокатило.

Как бы вы посоветовали решать такое? С какого конца зайти?

Хотелось бы иметь функцию, преобразующую величину числа в его координату на шкале.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: индицировать данные, поиск кратности.
СообщениеДобавлено: 23 фев 2018, 13:43 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 575
Откуда: GMT+6
А если одно и тоже число попадает в разные кратные ряды, что с ним делать?
Например массив 2 3 6


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: индицировать данные, поиск кратности.
СообщениеДобавлено: 23 фев 2018, 13:45 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 3722
Откуда: г. Липецк
Кот495 писал(а):
...Как бы вы посоветовали решать такое? С какого конца зайти?...

Если есть возможность, лучше зайти с другого конца. Т.е. не искать в одномерном массиве результаты двух разных измерений, а создать два массива. И класть в каждый свое измерение.
Или я не так понял?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: индицировать данные, поиск кратности.
СообщениеДобавлено: 23 фев 2018, 13:54 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 3325
Не, не получается. Эта смесь - результат вычислений.

Kelvin писал(а):
А если одно и тоже число попадает в разные кратные ряды, что с ним делать?
Например массив 2 3 6
Вопрос конечно интересный. Но здесь по идее должно быть два ряда: значит отметка "2" и отметка "3".
"В ручную" 6 я бы поставил и туда, и туда, но это уже не получится функция как таковая, получается множественный пробег в цикле по всем элементам массива.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: индицировать данные, поиск кратности.
СообщениеДобавлено: 23 фев 2018, 14:02 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 3722
Откуда: г. Липецк
Кот495 писал(а):
Не, не получается. Эта смесь - результат вычислений...

Мне кажется, ИМХО, даже в этом случае, логичнее на выходе вычислений раскладывать результат в два массива, чем заново проводить сканирование и отбор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: индицировать данные, поиск кратности.
СообщениеДобавлено: 23 фев 2018, 14:04 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 3325
Ну их не два может получиться, а неизвестное заранее количество.
Их и надо удобно проиндицировать, чтоб сразу было видно - сколько их вышло.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: индицировать данные, поиск кратности.
СообщениеДобавлено: 23 фев 2018, 14:14 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 575
Откуда: GMT+6
Я бы делал так
Код:
   const int maxArrayValue = 1e5; //Максимальное число в массиве +1
   int array[] = { 2, 3, 6, 5 };  //Исходный массив положительных чисел
   int arraySize = sizeof(array)/sizeof(int); //Длинна массива
   map<int, int> scale; //Шкала

   sort(array, array + arraySize);
   bool primes[maxArrayValue];
   memset(primes, true, maxArrayValue * sizeof(bool));
   for (int i = 2; i < maxArrayValue; i++)
   {
      if (primes[i])
      {
         for (int j = i; j < maxArrayValue; j += i)
         {
            primes[j] = false;
            if (binary_search(array, array + arraySize, j))
            {
               scale[i]++;
            }
         }
      }
   }

   for (auto item : scale)
   {
      if (item.second > 1)
      {
         cout << item.first << ": " << item.second << endl;
      }
   }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: индицировать данные, поиск кратности.
СообщениеДобавлено: 23 фев 2018, 14:23 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 3325
Спасибо. Общая мысль понятна...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB