当前位置: 首页 > 编程日记 > 正文

Re: 求助:5道算法题

http://www.newsmth.net/frames.html

发信人: cutepig (cutepig), 信区: Algorithm
标  题: 求助:5道算法题
发信站: 水木社区 (Sat Nov 10 18:25:06 2007), 站内


1)given a integer, output its previous and next neighbor number which has the same number of bit 1 in their binary representation.
(1)只想到一种很笨的方法,就是将这个数递增或者递减,直到找到一个和它1的位数一样多的为止,应该有更好的方法
(2)
满足条件的比这个数大的数应该是这个数从最低位开始,找到的第一个的01组合对调。
满足条件的比这个数小的数应该是这个数从最低位开始,找到的第一个的10组合对调。

2) Given 1 GB memory, input a file which contians 4 billion integers, output one integer that is not in the file. What if you have only 10 MB memory?
这个如果用一位表示一个数的存在与否的话,需要2^32bits=2^32/8bytes=2^29=512MB内存,用10M的话似乎只能读多次文件,每次判断某一部分数存在与否,有没有更好的办法?

3) how to divide an integer array into 2 sub-arrays and make their averages equal? e.g. a[left_portion]/left_portion_num == a[right_portion]/right_portion_num.

4)Given n unsigned integer, output 2 integers which has the maximum result after XOR.
莫非要遍历所有可能的组合?

5)Input an integer array of size n and an integer k (k<=n), output all subsets of size k.
(1)这个类似于全排列的生成算法吧,想出一个递归的回溯方法
array,n:数组和数组大小
k:子数列大小
void output(int *array,int n,int k)
{
   static int used[n];//这个静态数组记录是否该元素已经输出了,初始化为0
   static int outdata[k];//记录已经输出的元素
   if k<=0 ,return;
   对于array的每一个未输出的元素array[i]
  {
     将该元素放到outdata中,标记used[i]=1;
     如果满k个了,则输出outdata的数据
     否则,递归调用output(array,n,k-1)
     回溯,令used[i]=0;
  }
}
(2)或者写一个Next函数用来计算当前排列的下一个排列
BOOL Next(int *data,int nmax,int k)
{
int i;
#define MyMax(i) (nmax-k+i)
for (i=k-1;i>=0 ;i--)//从后向前找到第一个可以增加的数
{
ASSERT(data[i]
>=0 && data[i]<=MyMax(i));
if(data[i]<MyMax(i))
{
break;
}
}
if(i>=0)//将该位++,后面各位递增
{
data[i]
++;
for (int j=i+1;j<k;j++)
{
data[j]
=data[j-1]+1;
ASSERT(data[j]
<=MyMax(j))
}
return TRUE;
}
else
return FALSE;

}

初始化data={0,...,k-1},再一直调用Next就可以得到所有的排列
发信人: scottfield (金蛇郎君), 信区: Algorithm
标  题: Re: 求助:5道算法题
发信站: 水木社区 (Sat Nov 10 20:18:14 2007), 站内

第三个,可以参考CLRS,可以线性时间求得,是weighted-select problem
把值看成权就行了。

发信人: scottfield (金蛇郎君), 信区: Algorithm
标  题: Re: 求助:5道算法题
发信站: 水木社区 (Sat Nov 10 20:24:24 2007), 站内

第四题,XOR是 00->1 11->1是不?

则只要找出两个最高位相同的倍数最多的不就行了?

用Significant-bit Radix Sort 


发信人: ttl (小驴|主ID), 信区: Algorithm
标  题: Re: 求助:5道算法题
发信站: 水木社区 (Sat Nov 10 20:36:27 2007), 站内

【 在 wlalbert (找个打我球的女朋友) 的大作中提到: 】
如何用c++实现?
【 在 cutepig (cutepig) 的大作中提到: 】
: 似乎真的是这样呀
: 满足条件的比这个数大的数应该是这个数从最低位开始,找到的第一个的01组合对调。
: 满足条件的比这个数小的数应该是这个数从最低位开始,找到的第一个的10组合对调。
: ...................

void find(int i)
{
        int f = 3; // 11
        int pf = 2; // 10
        int nf = 1; // 01

        int p = 0; // 小
        int n = 0; // 大

        while (f < 4 * i)
        {
                int tmp = f & i;
                if (!p)
                {
                        if (0 == (tmp ^ pf))
                                p = i ^ f;
                }
                if (!n)
                {
                        if (0 == (tmp ^ nf))
                                n = i ^ f;
                }

                f  <<= 1;
                pf <<= 1;
                nf <<= 1;
        }

        cout << p << endl;
        cout << n << endl;
}
发信人: zgx03 (时间旅客), 信区: Algorithm
标  题: Re: 求助:5道算法题
发信站: 水木社区 (Sat Nov 10 21:07:26 2007), 站内

第4题这么做,
设原数组为A,里面的元素取反后形成第二个数组B,把这两个数组合起来形成数组C。
把C排一下序,找C的相邻两个分别属于A和B且二进制最高几位连续相同最多的,即可。
复杂度NlogN。

转载于:https://www.cnblogs.com/cutepig/archive/2007/11/10/955539.html

相关文章:

Linux下des对称性加密

最近对接公安审计一些经历 对方的需求&#xff1a; 打成zip包对zip包进行des-cbc对称性加密&#xff0c;使用约定好的 -K和-iv值比如 -K "abcd$#!" -iv "efgh$#!"加密后做base64编码起初是想尝试用 php 去做&#xff0c;经过一阵折腾之后发现&#xff0c;p…

在软件中常用的“撤销”操作,其本质是“栈”!

本文介绍了栈的定义与操作并利用顺序表和链表实现了栈这种常用的数据结构。

用拉链法实现哈希算法的运算

package lirui.find;import java.util.LinkedList;/*** Created by lirui on 14-8-13.* 用拉链法实现哈希算法的运算*/ public class MyHashSearch2 {public static final int SIZE 10;public static MyHashElement[] hashtable new MyHashElement[SIZE];// 记录hash表中的数…

C#图片处理常见方法性能比较

在.NET编程中&#xff0c;由于GDI的出现&#xff0c;使得对于图像的处理功能大大增强。在文通过一个简单黑白处理实例介绍在.NET中常见的图片处理方法和原理并比较各种方法的性能。 黑白处理原理&#xff1a;彩色图像处理成黑白效果通常有3种算法&#xff1b; (1).最大值法: 使…

软件中常用的“发送邮件”、“打印文档”,其本质是“队列”!

本图文详细介绍了顺序队列、循环队列、链队列的实现过程。

二分查找的循环实现和递归实现

自己实现了二分查找的循环实现和递归实现 说明&#xff1a;二分查找适用于顺序存储结构&#xff0c;不适于链式存储结构&#xff0c;是一个高效的查找方法。虽然折半查找效率高&#xff0c;但是要排序&#xff0c;排序本身是一种很费时的运算。要求传入的表是有序的。二分查找的…

CentOS6.8 编译安装LNMP

思路&#xff1a;根据Linux系统以及公司网站系统的信息&#xff0c;选择合适的安装包进行安装 一、查看系统信息 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # grep MemTotal /proc/meminfo # 查看内…

js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称

1,列举对象属性的名称<script language"javascript">varobjnewObject();obj.a"您好&#xff0c;我是田洪川";obj.b"你是田洪川咋的&#xff0c;不得了啊&#xff1f;";obj.c"西西&#xff0c;哈哈&#xff0c;我是属性 c ";//上…

Matlab与数据结构 -- 对向量的排序

本图文介绍了Matlab怎样实现对向量的排序。

HashMap和HashSet原理及底层实现

HashMap底层用哈希算法实现&#xff0c;下面看一下哈希算表的整体概括&#xff1a; 当map.put(“key”,”values”);的时候&#xff0c;底层是这样的&#xff1a; static final Entry<?,?>[] EMPTY_TABLE {}; transient Entry<K,V>[] table (Entry<K,V&g…

Study on Android【三】--Intent消息传递

在前面写Android的ContentProvider时候&#xff0c;可以看到那是基于观察者模式的一个消息传递方法。每一个Cursor、ContentResolver做为一个小的注册中心&#xff0c;相关观察者可以在这个中心注册&#xff0c;更新消息由注册中心分发给各个观察者。而在MFC或Winform中&#x…

Matlab与数据结构 -- 对矩阵的排序

本图文介绍了Matlab怎样实现对矩阵的排序。

Java_中快速获取系统时间

直接调用System的currentTimeMillis()即可&#xff01; long start System.currentTimeMillis(); System.out.println("Start time : "start);

servlet必知细节(一)

servlet必知细节&#xff08;一&#xff09; 今天复习了一下servlet&#xff0c;有过一些编程经验后&#xff0c;与最初学习servlet相比&#xff0c;对servlet理解的角度不同了&#xff0c;最初只是学习了如何写一个servlet&#xff0c;api怎么用&#xff0c;现在从更深处了解了…

办公室“暧昧”的几种结局。

暧昧结局一&#xff1a;以消散结尾 外贸公司职员小雨 p: [( I J( n, i/ L( L 那是我刚来这家公司的时候&#xff0c;参加面试时我就关注到其中一个面试我的男人长得不错&#xff0c;言谈举止也都很儒雅&#xff0c;所以第一面就留下了深刻印象。等到我被录取正式上班后…

Matlab与机器学习-- 数据的归一化

本文介绍了Matlab对数据归一化的处理函数mapminmax。

ASP.NET中的母版页

ASP.NET中的母版页 添加一个"母版页",使用<asp:ContentPlaceHolder>挖坑,新建的母版页已经自动设置了两个ContentPlaceHolder创建使用母版页的具体页面,WebSite是新建"Web窗体"的时候勾选"选择模板页",WebApplication是新建"Web内容窗…

servlet必知细节(二)--servlet执行过程

servlet必知细节(二)--servlet执行过程 我们知道&#xff0c;servlet没有main函数&#xff0c;那么&#xff0c;servlet是怎么调用的呢&#xff1f;实际上&#xff0c;servlet 是由tomcat调用的&#xff0c;tomcat调用servlet程序执行。由调用栈可以看到&#xff0c;当一个请求…

workerman源码分析之启动过程

2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/CpNice/p/4714182.html 转载于:https://my.oschina.net/yonghan/blog/898076

MD5加密方法

/**//// <summary>/// 16位MD5加密方法/// </summary>/// <param name"str">原文</param>/// <returns>密文</returns>publicstaticstringgetMd5(stringstr){ MD5CryptoServiceProvider md5 new MD5CryptoServiceProvider()…

如何教计算机认识手写数字(上)

本图文介绍了一种简单的教会计算机识别手写数字的方法。

servlet必知细节(三)-- DefaultServlet

servlet必知细节&#xff08;三&#xff09;-- DefaultServlet 缺省servlet&#xff1a;org.apache.catalina.servlets.DefaultServlet&#xff0c;作用是处理其他servlet处理不到的请求 我们知道&#xff0c;在我们工程的web.xml中&#xff0c;会配置servlet映射&#xff0c…

第五篇:Visual Studio 2008 Web开发使用的新特性

第五篇&#xff1a;Visual Studio 2008 Web开发使用的新特性 本篇翻译自MSDN。 .NET Framwork 3.5与Visual Studio 2008 包含很多新特性。AJAX的Web开发人员支持与综合查询语言&#xff08;LINQ&#xff09;是其中最重要的更新。此外还包含一些新的服务器端控件以及客户端对象库…

Jenkins使用Publish Over FTP Plugin插件上传FTP详解

一、安装插件【Publish Over FTP】 二、在【系统管理】->【系统设置】->【Publish over FTP】->点击【增加】按钮&#xff0c;增加一个要连接的FTP&#xff1a; FTP Server Name&#xff1a;FTP名字 Hostname&#xff1a;主机IP或者域名 Username&#xff1a;ftp登陆用…

Matlab与数据结构 -- 求向量或矩阵的最大值

本图文介绍了Matlab中求向量或矩阵最大值的方法。

web应用的绝对路径和相对路径

经常写web工程&#xff0c;就会涉及很多路径问题&#xff0c;今天复习下绝对路径和相对路径&#xff0c;以提醒自己下次不要以为路径问题头疼。 1.绝对路径和相对路径 相对路径&#xff1a;helloworld ./helloworld ../helloworld 这样的都是相对路径绝对路径&…

IE7外觀優化

众所周知&#xff0c;在Windows Vista的默认设置中&#xff0c;传统的文件菜单消失了&#xff0c;大部分过去通过菜单执行的任务如今由工具栏提供&#xff0c;或者在相应选择项的右键属性里。尽管这种改变使页面布局更简洁&#xff0c;但似乎许多用户并不认可或者至少说并不习惯…

使用GPUImageView录制视频保存后出现绿边

2019独角兽企业重金招聘Python工程师标准>>> 最近在使用GPUimageView做视频录制功能&#xff0c;录完后发现保存的视频右边有绿边&#xff0c;觉得好奇怪呀&#xff0c;为什么会这样呢&#xff1f;于是上网找资料&#xff0c;发现了这么一个说法&#xff1a;GPU和视…

Matlab与数据结构 -- 搜索向量或矩阵中非零元素的位置

本图文介绍了Matlab中搜索向量或矩阵中非零元素位置的方法。

jdk7新特性学习笔记

jdk7新特性学习笔记 从网络down了视频看&#xff0c;记录下学过的东西。1.二进制字面量 JDK7开始,可以用二进制来表示整数&#xff08;byte,short,int和long&#xff09;&#xff0c;语法&#xff1a;在二进制数值前面加 0b或者0B例如&#xff1a;int x 0b11112.数字字面量可以…