04 2013 档案
摘要:数据规模分析不考虑操作系统的区别,通常将C++中的一个整型变量认为4bytes。那么1亿整型需要400M左右的内存空间。当然,就现代PC机而言,连续开辟400M的内存空间还是可行的。因此,下面的讨论只考虑在内存中的情况。为了讨论方便,假设M=1亿,N=1万。用大拇指想想略微考虑一下,使用选择排序。循环1万次,每次选择最大的元素。源代码如下:Cpp代码//解决方案1,简单选择排序//BigArr[]存放1亿的总数据、ResArr[]存放1万的总数据voidsolution_1(intBigArr[],intResArr[]){for(inti=0;i<RES_ARR_SIZE;++i){i
阅读全文
摘要:问题:在一个规模为N的数组array[N]中,所谓主元素就是出现次数大于N/2的元素,例如3.3.4.2.4.4.2.4.4 有一个主元素为4。给出一个算法,如果过半元素存在,就找出来,否则给出报告,要求给出O(N)的算法。常规想法(1) 穷举:找出元素中每一个数在数据中的数量。时间复杂度O(N^2)(2) 排序:先对数组快排,然后重头开始遍历一遍计算每个数的数量。时间复杂度O(N*logN+N)经典算法 裁剪数组算法,时间复杂度为O(2N)思想: 如果一个数组array[N],其中有两个元素e1和e2。(1) e1不等于e2假如e1是数组array[N]的主元素,e2不是。那么e1在arra
阅读全文
摘要:普通的方法很简单,首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。算法复杂度为O(L+L/2)=O(3L/2)。能否再优化一下这个时间复杂度呢?有一个很巧妙的方法:设置两个指针* fast、*slow都指向单链表的头节点。其中* fast的移动速度是* slow的2倍。当* fast指向末尾节点的时候,slow正好就在中间了。C源代码如下:Java代码voidlocate(LinkedList*head){LinkedList*fast,*slow;fast=slow=head;while(fast->next!=NULL){//fast的移
阅读全文
摘要:有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题:1、如何判断一个链表是不是这类链表?2、如果链表为存在环,如果找到环的入口点?一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定 相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:Cpp代码boolIsExitsLoop(slist*head){slist*slow=head,*fast=head;while
阅读全文
摘要:实现C/C++中的字符串操作函数是很练内功的,别看着这些函数很简单,自己实现起来,还是有许多地方需要考虑的,所以没独立写过的朋友,可以自己敲敲看 .--By Crazybabystrcpy:[cpp]view plaincopyprint?char*cb_strcpy(char*dst,constchar*src){assert((dst!=NULL)&&(src!=NULL));char*retAddr=dst;/**<retAddrisinstatic,charretAddr[]willinStack,So...*/while((*(dst++)=*(src++))!
阅读全文
摘要:端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian(这句话最为形象)。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。下文举例说明在计算机中大小端模式的区别。如果将一个32位的整数0x12345678存放到一
阅读全文
摘要:示范程序seg7_test.v?12345678910111213141516171819202122/** seg7 x 8 查找表测试文件*/module seg7_test(input CLOCK_50,output [7:0] SEG7_DIG,output [7:0] SEG7_SEG);seg7_8_LUT u0(.i_clock(CLOCK_50),.i_turn_off(8'b1100_0000), // 熄灭位[此处取第7、6位.i_dp(8'b0000_0100), // 小数点位[此处取第2位.i_data(32'hAB_CDEF), // 欲显数
阅读全文
摘要:几种嵌入式GUI介绍MicroWindowsCentury软件公司维护的,较早出现的开放源代码的嵌入式嵌入式 GUI特点:1主要特色:提供较为完善的图形功能,支持多种外部设备输入,包括LCD、鼠标和键盘等。2核心是基于显示设备接口的,绝大部分使用 C语言开发的,移植性很强。3主要在 linux、wince等操作系统上运行。MiniGUI我国为数不多的在国际比较知名的自由软件之一,早期有魏永明先生和许多志愿者开发,现在有北京飞漫公司(www.minigui.com)进行维护和商业运作。特点:1主要特色:轻量级的图形界面, MiniGUI代码都采用c 语言开发,提供完备的多窗口机制和消息传递机制。
阅读全文
摘要:SDRAM DQM的解释,总算明白了数据掩码在讲述读/写操作时,我们谈到了突发长度。如果BL=4,那么也就是说一次就传送4×64bit的数据。但是,如果其中的第二笔数据是不需要的,怎么办?还都传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽。DQM由北桥控制,为了精确屏蔽一个P-Bank位宽中的每个字节,每个DIMM有8个DQM信号线,每个信号针对一个字节。这样,对于4bit位宽芯片,两个
阅读全文
浙公网安备 33010602011771号