Nano Hash - криптовалюты, майнинг, программирование

сортировка значений в векторной матрице, вывод соответствующих индексов

Я нашел этот вопрос ниже, который получил несколько хороших ответов:

Например, у меня есть набор, вектор или матрица образцы A: [5, 2, 1, 4, 3]. Я хочу отсортировать их как B: [1,2,3,4,5], но я также хочу запомнить исходные индексы значений, поэтому я могу получить другой набор, который будет: C: [2, 1 , 4, 3, 0 ] - что соответствует индексу каждого элемента в 'B', в исходном 'A'.

что, если я расширю проблему до 2 индексов, скажем, например, матрицу 2x3

1 5 6

4 8 2

отсортировано (по убыванию, ни по столбцам, ни по строкам, только по значениям)

8 6 5 4 2 1

выходные индексы

(1,1) (0,2) (0,1) (1,0) (1,2) (0,0)

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

template <typename T> vector <vector <size_t>> sort_indexes(const vector <vector <T>> &v)

//// initialize original index locations
vector<vector<size_t>> idx(v.size());
for (size_t i = 0; i != idx.size(); ++i) {
    idx[i] = i;
    for (size_t j = 0; i != idx[i].size(); ++j) {
        idx[j] = j;
    }
}
// sort indexes based on comparing values in v
sort(idx.begin(), idx.end(),
    [&v](size_t i1, size_t i2) {return v[i1] > v[i2]; });

return idx;

}

интервал основной () {

vector<vector<int>> v;
v[0].push_back(10);
v[0].push_back(1);
v[0].push_back(3);
v[1].push_back(20);
v[1].push_back(30);
v[1].push_back(40);

for (auto i = 0; i < v.size(); i++) {
    for (auto j:sort_indexes(v) )
    cout << i << j <<"  "<< v[i][j] << endl;
}
cin.get();
return 0;

}

я принял это https://stackoverflow.com/a/12399290/5807825 для своей проблемы. Я попробовал некоторые настройки на code, может ли кто-нибудь пролить свет, пожалуйста, какие части неверны или все... надеюсь, что нет.

19.01.2016

  • не очень понял ваш вопрос, вы ищете алгоритм для его реализации. объяснение понятно. Вы просто хотите реализовать это, независимо от процесса, связанного с 19.01.2016
  • большое спасибо за вопрос. да, мне нужен код C++, чтобы реализовать его... ответ от Lukasz Wiklendt, посвященный использованию лямбда-функции C++, каким-то образом дал мне кое-что для начала. я пытался его ответ для моего случая, но не был успешным. 19.01.2016

Ответы:


1

Создайте массив указателей или индексов на массив и отсортируйте указатели или индексы в соответствии с массивом. При использовании указателей функция сравнения просто должна знать тип элементов в массиве. При использовании индексов можно использовать лямбда-сравнение (при условии, что такой язык, как C++, Java,...).

Пример кода C++ для массива с использованием индексов и лямбда-сравнения:

void examplesort(int array[], int index[], int size){
    int * tmpa = new int[size];     // temp array
    // generate indices to array
    for(int i = 0; i < size; i++)
        index[i] = i;
    // sort indices according to array
    std::sort(index, index+size,
        [&array](int i, int j) {return array[i] < array[j];});
    // tmpa[] = sorted array[]
    for(int i = 0; i < size; i++)
        tmpa[i] = array[index[i]];
    // copy tmpa to array
    for(int i = 0; i < size; i++)
        array[i] = tmpa[i];
    delete[] tmpa;
    return;
}
19.01.2016
  • так как я просто перехожу к C ++ vector/STL, мне может понадобиться время, чтобы выяснить ваши предложения ... Но я попробовал способ от @Lukasz Wiklendt, его ответа на вопрос, на который я ссылался выше? он хорошо работает для одного индекса. Не могли бы вы показать мне некоторые настройки его сложного кода, который может обрабатывать пример, который я показываю выше? 19.01.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..