自己写的,在网上其他地方找不到,嘿嘿,VS2017能运行。

#include <iostream>
#include <cstdlib>
using namespace std;
// 用于存储一个码片(1/-1),或者多个下标组合
class NumList {public:int data[9]; // 注意以后下标都从1开始int length;
public:NumList() {length = 0;}NumList(int len, int in_data[]) {length = len;for (int i = 1; i <= len; i++) {data[i] = in_data[i];}}// 求反码NumList reverse() const {NumList e;e.length = length;for (int i = 1; i <= length; i++) {e.data[i] = data[i] * -1;}return e;}// 增加元素void add_elem(const int &e) {data[++length] = e;}// 反转指定下标的单个元素void rever_single(const int index) {data[index] *= -1;}// 删除顶部元素void pop_elem() {length--;}// showvoid show() {for (int i = 1; i <= length; i++) {cout << data[i] << " ";}cout << endl;return;}// 重载==运算符bool operator==(const NumList &b) {if (length != b.length)return false;else {for (int i = 1; i <= length; i++) {if (data[i] != b.data[i])return false;}}return true;}
};// 用于存储码片集合
class ChipNode {private:NumList data;ChipNode *next;
public:ChipNode(const NumList &in_data, ChipNode *in_next) :data(in_data), next(in_next) {}friend class ChipLink;
};
class ChipLink {private:ChipNode *H;ChipNode *now;
public:ChipLink() {NumList t;H = new ChipNode(t, NULL);now = H;}void add_chip(const NumList &e) {ChipNode *p = H;while (p->next) {ChipNode *t = p->next;// 如果本身已经存在或其反码片已经存在if (t->data == e || t->data == e.reverse())return;p = p->next;}ChipNode *new_node = new ChipNode(e, p->next); // p->next = NULLp->next = new_node;}void show() {ChipNode *p = H->next;while (p) {p->data.show();p = p->next;}cout << endl;return;}bool traverse(NumList &ret) {if (now == H) now = H->next;if (now == NULL) {now = H;return false;}else {ret = now->data;now = now->next;return true;}}
};// 算法所在类
class CDMAChipSet {private:NumList ini_chip;ChipLink set;// 获取指定个数的所有组合组成的链表void get_index_comb(ChipLink &link, int len, NumList &stack, int num, int res_index) {// 递归终点if (num == 0) {// 将stack复制一份加入链表link.add_chip(stack);}// 向下递归for (int i = res_index; i <= len; i++) {stack.add_elem(i);get_index_comb(link, len, stack, num - 1, i + 1);stack.pop_elem();}return;}void get_orthogonal() {int i;// 先遍历ini码片,获取-1和1的个数和位置NumList neg_loc, pos_loc;  // 记录位置int neg_num = 0, pos_num = 0;  // 记录数量for (i = 1; i <= ini_chip.length; i++) {int val = ini_chip.data[i];if (val == -1) {neg_loc.add_elem(i);neg_num++;}else{pos_loc.add_elem(i);pos_num++;}}// 求反转数int neg_rever_num = (neg_num - pos_num) / 2;int pos_rever_num = (pos_num - neg_num) / 2;if (neg_rever_num < 0)neg_rever_num = 0;elsepos_rever_num = 0;int rever_time = (neg_loc.length > pos_loc.length) ? pos_loc.length : neg_loc.length;// 对每种位数组合 求反转位置链表for (i = 0; i <= rever_time; i++) {ChipLink a, b;NumList t_stack1;get_index_comb(a, neg_loc.length, t_stack1, neg_rever_num + i, 1);NumList t_stack2;get_index_comb(b, pos_loc.length, t_stack2, pos_rever_num + i, 1);// ab组合NumList t1, t2; // 临时容器int data[] = { 0, 1, 1, 1, 1, 1, 1, 1, 1 };while (a.traverse(t1)) {while (b.traverse(t2)) {NumList e(8, data);//生成正交码片int j, index;for (j = 1; j <= t1.length; j++) {index = t1.data[j];e.rever_single(neg_loc.data[index]);}for (j = 1; j <= t2.length; j++) {index = t2.data[j];e.rever_single(pos_loc.data[index]);}set.add_chip(e);}}}return;}
public:CDMAChipSet(const NumList &in_ini_chip) : ini_chip(in_ini_chip) {get_orthogonal();}void showset() {int i;for (i = 1; i <= ini_chip.length; i++) {cout << ((ini_chip.data[i] == 1) ? 1 : 0) << " ";}cout << endl << "的所有正交码片如下:" << endl;int amount = 0;NumList container;while (set.traverse(container)) {amount++;for (i = 1; i <= container.length; i++) {cout << ((container.data[i] == 1) ? 1 : 0) << " ";}cout << endl;}cout << "共 " << amount << " 个" << endl;}
};int main(void) {NumList chips[5];int i, j;for (i = 0; i < 5; i++) {for (j = 1; j <= 8; j++) {chips[i].add_elem((rand() % 2 == 0) ? 1 : -1);}}for (i = 0; i < 5; i++) {CDMAChipSet set(chips[i]);set.showset();cout << endl;}system("pause");return 0;
}

计算机网络实验二 CDMA编码 求所有正交码片相关推荐

  1. 计算机网络实验二cdma编码,CDMA编码实验_长春理工大学

    CDMA编码 计算机网络.CDMA 实验二CDMA编码 1.实验题目:CDMA编码 2.实验内容: (1)随机生成5个互不正交的8位码片M1.M2.M3.M4.M5. (2)分别求出与M1.M2.M3 ...

  2. 计算机网络实验二 CDMA 编码 [17/10/25]

    1.实验题目:CDMA 编码 2.实验内容: (1) 随机生成 5 个互不正交的 8 位码片 M1.M2.M3.M4.M5. (2) 分别求出与 M1.M2.M3.M4.M5所有正交的 8 位码片. ...

  3. 天津理工大学 计算机网络综合实验,天津理工大学计算机网络 实验二

    <天津理工大学计算机网络 实验二>由会员分享,可在线阅读,更多相关<天津理工大学计算机网络 实验二(6页珍藏版)>请在人人文库网上搜索. 1.实验报告学院(系)名称:计算机与通 ...

  4. 计算机网络阅读报告,计算机网络实验二报告

    计算机网络实验二报告 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 计算机网络实验报告课程_ 计算机网络 _ 实验名称 TCP/ ...

  5. 算术编码 matlab程序,实验二算术编码及MATLAB实现.doc

    实验二算术编码及MATLAB实现 武夷学院实验报告 课程名称: 多媒体通信技术 项目名称: 算术编码及MATLAB实现 姓名: _专业:__通信工程___ 班级: 学号:____同组成员_无_ 实验准 ...

  6. 深大算法设计与分析实验二——分治法求最近点对问题

    源代码: 深大算法设计与分析实验二--分治法求最近点对问题代码-C/C++文档类资源-CSDN下载 目录 实验问题 一.实验目的: 二.内容: 三.算法思想提示 产生不重复的随机点算法: 蛮力算法: ...

  7. 计算机网络实验二:ARP欺骗

    计算机网络实验二:ARP欺骗 博客链接:https://www.blog.23day.site/articles/66 一.wireshark 要求:配置并使用wireshark,在无线环境下监听非本 ...

  8. 湖南大学计算机网络实验二------水

    计算机网络实验二 网络基础编程实验(Python3) HNU 由于这一次实验2.1-2.3都是给了代码的,所以没有写了,只写了2.3的对比和2.4的代码,实现互通信 2.3 多线程/线程池对比(pyt ...

  9. 计算机网络实验报告西南科技大学,西南科技大学计算机网络-实验二.docx

    计算机网络实验报告 实验二 实验名称: 基本交换机配置 学 号: 学生姓名: 班 级: 指导教师: 实验地点: 评 分: 一.实验目的 创建基本的交换机配置,包括名称和?IP?地址 配置口令以确保对? ...

最新文章

  1. MOSA 4600 Plus IP PBX FAQ(应用常见知识点-故障排除)(2)
  2. zbb20180827 java获取字符串中所有汉字
  3. 什么是服务质量(QoS) ?—Vecloud微云
  4. 求1!+2!+3!+...+10!的值
  5. 让Android Studio代码提示不区分大小写的方法
  6. Blazor 准备好为企业服务了吗?
  7. ggplot2横坐标标签旋转
  8. Java基础---代码块和final关键字
  9. Service之bindService
  10. 华强北出租5G手机,半小时3块钱,双11“秒杀利器”,十秒九中!
  11. linux下面桌面的安装
  12. ASP.NET动态加载用户控件的页面生成过程
  13. Win7开机动画不见了
  14. 确定你的电脑是否支持安装64位操作系统
  15. 科普:机器视觉技术原理解析及应用领域
  16. VScode 常用插件推荐,非常全面
  17. Python离线安装whl文件,xxx.wh1 is not a supported wheel on this platform
  18. 软件测试职业规划 (面试题)
  19. 激活函数总结sigmoid,tanh,relu,Leaky ReLU,RRelu,ELU,PRelu,SELU,swish
  20. RTX操作系统教程[00]

热门文章

  1. route和bridge是什么意思_路由器与网桥的区别是什么
  2. 五险一金,终于懂了!
  3. 算法的五大要素 学计算机必备
  4. java综合知识点总结-必背
  5. 《禅与摩托车维修艺术》书摘
  6. 1.RecyclerView设置clipToPadding=“false“,scrollbars无法跟随列表滚动到底部的解决方案
  7. Spring AOP源码(1)—<aop:config/>AOP配置标签解析【一万字】
  8. iphone无线服务器未响应,iphone8无限转圈黑屏强制关机没反应(解决死机黑屏无法开机的3种方式)...
  9. 创业公司考勤管理如何做到快准狠!
  10. 明天14:00,棕榈泉见~友盟+、大麦网、凯叔讲故事都在