重复元素选择算法 selection 源代码

原创 2004年07月29日 19:24:00

// Copyright (C) 2004 BenBear
//
// This file is an algorithm of selection.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING.  If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.

#include <algorithm>
#include <iostream>
#include <cstdlib>
using namespace std;

template <typename BiIter>
bool
next_selection (BiIter first, BiIter last)
{
    if (first == last)
        return false;
   
    BiIter i = last;
    if (--i == first)
        return false;
   
    BiIter j = i;
    if (*--i == 0)
    {
        while ((i != first) && (*i == 0))
            --i;
        if (*i == 0)
        {
            iter_swap (first, j);
            return false;
        }
       
        BiIter ii = i;
        *(++ii) = *j + 1;
        *j = 0;
        --*i;
    }
    else
    {
        --*i;
        ++*j;
    }
    return true;
}

template <typename BiIter>
bool
prev_selection (BiIter first, BiIter last)
{
    if (first == last)
        return false;
   
    BiIter i = last;
    --i;
    if (first == i)
        return false;
   
    if (*i == 0)
    {
        while (*--i == 0)
            ;
        if (i == first)
        {
            *--last = *i;
            *i = 0;
            return false;
        }
        BiIter j = i;
        --j;
        ++*j;
        --*i;
        iter_swap (i, --last);
    }
    else
    {
        BiIter j = i;
        --j;
        ++*j;
        --*i;
    }
    return true;
}

// for test:
int main()
{
    const int n = 4;
    int a[n] = {0, 0, 0, 3};
   
    do
    {
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < a[i]; ++j)
                cout << (i + 1);
        cout << endl;
    }   
    while (prev_selection (a, a+n));
   
    cout << "------------------" << endl;
   
    int b[n] = {3, 0, 0, 0};
    do
    {
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < b[i]; ++j)
                cout << (i + 1);
        cout << endl;
    }   
    while (next_selection (b, b+n));

    system ("pause");
}

 

总结 特征选择(feature selection)算法笔记

什么是特征选择 特征选择也称特征子集选择,或者属性选择,是指从全部特诊中选取一个特征子集,使构造出来的模型更好。 为什么要做特征选择 在机器学习的实际应用中,特征数量往往较多...
  • adore1993
  • adore1993
  • 2017年01月02日 16:50
  • 2019

【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time)

从数组array中找出第k小的元素,即经典的“线性时间选择”问题
  • BrilliantEagle
  • BrilliantEagle
  • 2014年08月17日 20:21
  • 1457

m个元素的数组,随机选择n个不重复元素(js实现)

问题描述:在由m个元素的source数组中,随机选择n个不重复的元素放入新数组target 注:source数组元素本身不重复,m>n解决方案方案一: 根据数组source,在0到source.len...
  • xi_2130
  • xi_2130
  • 2016年01月09日 21:21
  • 1918

【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time)

从数组array中找出第k小的元素,即经典的“线性时间选择”问题
  • BrilliantEagle
  • BrilliantEagle
  • 2014年08月17日 20:21
  • 1457

编写算法清除顺序表L中所有重复的数据元素

  • 2013年10月07日 17:31
  • 1KB
  • 下载

选择排序算法(Selection Sort)

选择排序算法的java实现。
  • Lammonpeter
  • Lammonpeter
  • 2017年07月10日 15:22
  • 216

Feature Selection: A Data Perspective --阅读笔记2 传统数据的特征选择算法

传统数据的特征选择算法 在本节中,我们根据所使用的技术对传统数据的传统特征选择算法进行了广泛的分类: - **基于相似性(Similarity based Methods)**; - **基于信...
  • liveway6
  • liveway6
  • 2017年11月27日 17:39
  • 56

总结 特征选择(feature selection)算法笔记

总结 特征选择(feature selection)算法笔记 原创 2017年01月02日 16:50:18 标签:算法 /数据 /特征选择 996 ...
  • kebu12345678
  • kebu12345678
  • 2017年11月09日 07:52
  • 66

经典排序算法 - 选择排序Selection sort

顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 再简单点,对着一群数组说,你们谁最小出列,站到最后边 然后继续对剩余的...
  • acmsim
  • acmsim
  • 2013年03月28日 23:22
  • 242

选择排序(Selection Sort)算法-1

Selection Sort(从小到大): 1.:在选择范围选择出最小的元素,然后和第一位互换位置 2.:在剩下的位置中找出最小的元素 依此类推...
  • qq_33936481
  • qq_33936481
  • 2017年05月13日 08:07
  • 109
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重复元素选择算法 selection 源代码
举报原因:
原因补充:

(最多只允许输入30个字)