计算复杂性的几个概念

NP,问题多项式时间可验证。

P,问题多项式时间可解。

NP-hard,至少与NP中最难的问题一样难,所有NP问题可规约为该问题。

NP-complete,既是NP-hard,又是NP的问题。

APX是一个NP优化问题的集合,该集合中的问题对于某个常量限定的精度存在多项式时间的近似算法。

对于每个常量限定的精度均存在一个多项式时间算法的问题,称作有PTAS(多项式时间近似模式)。

如果NP!=P,则存在APX问题不是PATS问题。对于一个APX问题,如果存在一个约规约程可以将任意APX问题规约为该问题,则该问题称为APX-hard。如果NP!=P,则没有APX-hard是PTAS。

如果问题是APX-hard,又是APX,则称为APX-complete。

转自:https://blog.sciencenet.cn/blog-817286-650202.htmlicon-default.png?t=M3C8https://blog.sciencenet.cn/blog-817286-650202.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FourInOne(中文名字“四不像”)是一个四合一分布式计算框架,在写这个框架之前,我也看了老外写的其他开源框架,也对分布式计算进行了长时间的思考,当我们把复杂的hadoop当作一门学科学习时,似乎忘记了我们想解决问题的初衷:我们仅仅是想写个程序把几台甚至更多的机器一起用起来计算,把更多的cpu和内存利用上,来解决我们数量大和计算复杂的问题,当然这个过程中要考虑到分布式的协同和故障处理。如果仅仅是为了实现这个简单的初衷,为什么一切会那么复杂,我觉的自己可以写一个更简单的东西,它不需要过度设计,只需要看上去更酷一点,更小巧一点,功能更强一点。于是我将自己对分布式的理解融入到这个框架中,考虑到底层实现技术的相似性,我将Hadoop,Zookeeper,MQ,分布式缓存四大主要的分布式计算功能合为一个框架内,对复杂的分布式计算应用进行了大量简化和归纳。 首先,对分布式协同方面,它实现了Zookeeper所有的功能,并且做了很多改进,包括简化Zookeeper的树型结构,用domain/node两层结构取代,简化Watch回调多线程等待编程模型,用更直观的容易保证业务逻辑完整性的内容变化事件以及状态轮循取代,Zookeeper只能存储信息不大于1M的内容,FourInOne超过1M的内容会以内存隐射文件存储,增强了它的存储功能,简化了Zookeeper的ACL权限功能,用更为程序员熟悉rw风格取代,简化了Zookeeper的临时节点和序列节点等类型,取代为在创建节点时是否指定保持心跳,心跳断掉时节点会自动删除。FourInOne是高可用的,没有单点问题,可以有任意多个复本,它的复制不是定时而是基于内容变更复制,有更高的性能,FourInOne实现了领导者选举算法(但不是Paxos),在领导者服务器宕机情况下,会自动不延时的将请求切换到备份服务器上,选举出新的领导者进行服务,这个过程中,心跳节点仍然能保持健壮的稳定性,迅速跟新的领导者保持心跳连接。基于FourInOne可以轻松实现分布式配置信息,集群管理,故障节点检测,分布式锁,以及淘宝configserver等等协同功能。 其次, FourInOne可以提供完整的分布式缓存功能。如果对一个中小型的互联网或者企业应用,仅仅利用domain/node进行k/v的存储即可,因为domain/node都是内存操作而且读写锁分离,同时拥有复制备份,完全满足缓存的高性能与可靠性。对于大型互联网应用,高峰访问量上百万的并发读写吞吐量,会超出单台服务器的承受力,FourInOne提供了fa?ade的解决方案去解决大集群的分布式缓存,利用硬件负载均衡路由到一组fa?ade服务器上,fa?ade可以自动为缓存内容生成key,并根据key准确找到散落在背后的缓存集群的具体哪台服务器,当缓存服务器的容量到达限制时,可以自由扩容,不需要成倍扩容,因为fa?ade的算法会登记服务器扩容时间版本,并将key智能的跟这个时间匹配,这样在扩容后还能准确找到之前分配到的服务器。另外,基于FourInOne可以轻松实现web应用的session功能,只需要将生成的key写入客户端cookie即可。 FourInOne对于分布式大数据量并行计算的解决方案不同于复杂的hadoop,它不像hadoop的中间计算结果依赖于hdfs,它使用不同于map/reduce的全新设计模式解决问题。FourInOne有“包工头”,“农民工”,“手工仓库”的几个核心概念。“农民工”为一个计算节点,可以部署在多个机器,它由开发者自由实现,计算时,“农民工”到“手工仓库”获取输入资源,再将计算结果放回“手工仓库”返回给“包工头”。“包工头”负责承包一个复杂项目的一部分,可以理解为一个分配任务和调度程序,它由开发者自己实现,开发者可以自由控制调度过程,比如按照“农民工”的数量将源数据切分成多少份,然后远程分配给“农民工”节点进行计算处理,它处理完的中间结果数据不限制保存在hdfs里,而可以自由控制保存在分布式缓存、数据库、分布式文件里。如果需要结果数据的合并,可以新建立一个“包工头”的任务分配进行完成。多个“包工头”之间进行责任链式处理。总的来说,是将大数据的复杂分布式计算,设计为一个链式的多“包工头”环节去处理,每个环节包括利用多台“农民工”机器进行并行计算,无论是拆分计算任务还是合并结果,都可以设计为一个单独的“包工头”环节。这样做的好处是,开发者有更大能力去深入控制并行计算的过程,去保持使用并行计算实现业务逻辑的完整性,而且对各种不同类型的并行计算场景也能灵活处理,不会因为某些特殊场景被map/reduce的框架限制住思维,并且链式的每个环节也方便进行监控过程。 FourInOne也可以当成简单的mq来使用,将domain视为mq队
### 回答1: 数据密集型计算机是指一种计算机系统,其主要任务是处理大量数据的计算和分析。这种计算机通常具有高速的数据存储和处理能力,能够快速地处理大量数据,并且能够有效地利用多核处理器和分布式计算技术,以提高计算效率。数据密集型计算机广泛应用于数据挖掘、机器学习、人工智能、科学计算、金融分析等领域。 ### 回答2: 数据密集型计算机是一种用于处理大规模数据集的计算机系统。随着信息时代的到来,海量的数据需要存储、处理和分析。传统的计算机架构不再满足这种需求,而数据密集型计算机则应运而生。 数据密集型计算机具有以下几个特点: 首先,数据密集型计算机有很高的存储容量和处理能力。它能够快速存储和检索大量的数据,并能够并行处理这些数据。这使得它能够高效地处理大规模数据集。 其次,数据密集型计算机通常采用分布式计算架构。它可以通过使用多个计算节点和存储节点,将任务分解并并行执行。这种分布式架构可以提高计算和存储的效率,同时也增加了系统的可靠性和容错性。 此外,数据密集型计算机还需要具备高度可扩展性。它需要能够根据需求扩展计算和存储资源,以应对不断增加的数据量和计算任务。 数据密集型计算机主要应用于大数据分析、机器学习、人工智能等领域。例如,在金融行业,数据密集型计算机可以用于风险评估、投资策略优化等。在医疗领域,它可以用于基因分析、疾病诊断等。在互联网领域,数据密集型计算机可以用于用户行为分析、个性化推荐等。 总的来说,数据密集型计算机是为了满足大规模数据处理需求而设计的计算机系统,具有高存储容量、并行处理能力、分布式计算架构和高可扩展性。它在大数据分析和人工智能等领域有着广泛的应用前景。 ### 回答3: 数据密集型计算机是一种专门用于处理大量数据并进行复杂计算计算机系统。数据密集型计算机在处理大规模数据时具有高效、并行和可扩展性的特点。 首先,数据密集型计算机主要用于处理大量数据。这些数据可以是结构化的(如关系型数据库中的表格数据)或非结构化的(如图像、视频、文本等),并且通常以海量数据的形式存在。数据密集型计算机能够通过一系列的算法计算模型对这些数据进行分析、挖掘和处理。 其次,数据密集型计算机具有高效性。它能够通过并行计算和分布式计算的方式,同时利用多个处理单元或计算节点,并且能够充分发挥硬件资源,提高计算效率和速度。这对于处理大规模数据来说尤为重要,能够大幅缩短计算时间。 另外,数据密集型计算机也具有可扩展性。随着数据量的增长,计算需求也会相应增加。数据密集型计算机能够通过增加计算节点或者扩展存储容量来满足不断增长的计算需求。这种可扩展性使得计算机系统能够适应未来的发展需求,保持高效性和稳定性。 总的来说,数据密集型计算机是一种针对大规模数据处理和复杂计算任务设计的计算机系统。它能够高效地处理大量数据,具有高并行性和可扩展性的特点。随着数据量的增长,数据密集型计算机将在各个领域发挥越来越重要的作用,并推动科学研究、商业决策等方面取得更大的突破。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值