Programming Pearls Essay 01
01 如果不缺内存,如何使用一个具有库的语言来实现一种排序算法以表示和排序集合?
1 Array.Sort(array);
02 如何使用位逻辑运算(例如与,或,移位)来实现位向量。
重要的概念:用一个n位长的字符串来表示一个所有元素都小于n的简单非负整数集合。
相对一般的数据而言,其特点是:
a,数据限制在一个范围里
b,数据没有重复
c,数据没有其他的关联项
int n = 100;byte[] array = new byte[n];//可以储存[0,n*8)的数 //用int m举例,假设m在范围内int m,index,step;//index确定byte数组的索引位置,step确定byte[index]里的bit位index = m/8;step = m%8;byte temp = 1;temp = temp<<step;array[index] = array[index]||temp;
疑问:书中似乎是用byte位做标识的,因为“原话是用一个n位的字符串来表示文件”,用bit可以进一步压缩空间,因为每一个位上的值只是0或者1。
03 假设n为10000000,输入文件包含1000000个整数。使用位图排序并与系统排序比较效率。
系统排序的时间复杂度为O(nlogn),简单位图排序的时间复杂度是O(n)。
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace _01._03{class Program {static void Main(string[] args) {//模拟的数据源,看上去本身就是排好序的... int arrayLength = 1000000;int[] array = new int[arrayLength];for (int i = 0; i < arrayLength; i++) { array[i] = i; }int resultLength = arrayLength / 8;byte[] result = new byte[resultLength];//125000个byte就可以装下结果,新建的时候自动全设为0 int index, step,byteSize = sizeof(byte)*8;byte temp;foreach (var item in array) { temp = 1; index = item / byteSize; step = item % byteSize; temp = (byte)(temp << step); result[index] =(byte)(result[index] + temp); } } }}
最后的结果里每个byte都是0XFF,今天先到这。
转载于:https://www.cnblogs.com/yuklin/archive/2011/12/06/2277962.html
Programming Pearls Essay 01相关推荐
- Game Programming with DirectX -- 01[初识Direct3D]
Game Programming with DirectX -- 01[初识Direct3D] 第一卷 朦胧的3D世界 第一集 初识Direct3D 简介 我们通过2个例子来简单的认识3D 1.1 接 ...
- 动态规划算法(Dynamic Programming)之0-1背包问题
文章目录 1. 问题引入 2. 动态规划求解0-1背包 3. 复杂度 4. 0-1背包升级版(带价值) 5. 0-1背包升级版(带价值)DP解法 1. 问题引入 前面讲了0-1背包的回溯解决方法,它是 ...
- Happy Programming Contest(01背包)
In Zhejiang University Programming Contest, a team is called "couple team" if it consist ...
- Programming Pearls: Chatper3 Problem5 [Hyphenation Words]
Program Source Code Lesson Learned: selecting the correct data structure makes coding/algorithm pret ...
- Programming Pearls: Chatper3 Problem6 [Form letter generator]
Program source code Lesson Learned: please verify your thought carefully and slowly during pseudocod ...
- 重读《Programming Pearls》之十:Squeezing Space
The Key--Simplicity: Simplicity can yield functionality, robustness, speed and space. Techniques for ...
- 计算机专业免费电子书下载列表List of freely available programming books
计算机专业免费电子书下载列表 List of freely available progra ...
- Paradigm Shifts in Kernel Programming 内核编程的范式转移
Paradigm Shift in Kernel Programming 内核编程的范式转移 Raymond Kwan 这篇小文章主要分析了操作系统内核编程中主要使用C和命令式范式的原因,同时讨论了其 ...
- 微软等数据结构+算法面试100题全部答案集锦
微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...
最新文章
- 【星辰傀儡线·命运环·卷二 尘埃】 5 困惑
- 浅析java中的语法糖
- C语言函数 snprintf()(发送有限字符截断字符串输出到 str 所指向的字符串)(字符串拼接、截断拼接)
- 在没有任何前端开发经验的基础上, 创建第一个 SAP Fiori Elements 应用
- .NET Core 3.1之深入源码理解HealthCheck(二)
- Java集合(3)--Iterator迭代器
- 为什么阿里要和小米在智能音箱上死磕?
- 记账系统推荐金蝶精斗云_金蝶精斗云的免费财务做账软件有哪些?
- matlab 求不规则体积,matlab,求不规则三维图形体积?
- 5 mysql 凤舞天骄_浅谈5行刺客的技能 凤舞天骄
- 50.网络安全渗透测试—[穷举篇13]—[wfuzz多线程百万密码测试指定后台破解]
- 触摸DevOps,从现在开始DevOps之旅
- 精通 CSS+DIV 网页样式与布局 57
- 学ps要计算机基础吗,零基础怎样学会PS?电脑0零基础绘画
- 电影主题HTM5网页设计作业成品——爱影评在线电影(10页面)使用dreamweaver制作采用DIV+CSS进行布局
- 上亿海量数据处理方法
- 倍福PLC和C#通过ADS通信传输bool类型变量
- python3-函数与参数以及空值
- 201421410039鹿永润实验二第一部分
- 行为识别(Action Recognition)初探
热门文章
- 下载python后怎样打开-下载python后如何启动
- r语言和python-R语言和Python哪个适合生物信息学?
- python制作工资计算器-Python实现扣除个人税后的工资计算器示例
- python画图简单代码-用python进行简单的画图操作
- python叫什么-什么叫Python运算符重载
- 如何查看python是多少位的-如何查看Python的位数
- 爬虫好学吗python-爬虫Python入门好学吗?学什么?
- python上海培训哪里比较好-python培训班上海哪里比较好?
- python2好还是python3好-总结对比Python2和Python3之间的区别
- python中文件读写位置的作用-文件操作,读,写,指定位置