草庐IT

algorithm

全部标签

c++ - 不可分割的数

你将得到一个正整数N。你的任务是找到正整数K≤N的个数,使得K不能被集合{2,3,4,5,6,7,8,9,10}。我在考虑所有素数,但没有给出正确答案。令人惊讶的是,答案非常简单。#includeusingnamespacestd;intmain(){intt;cin>>t;while(t--){longlongn;cin>>n;longlongans=(n/2+n/3+n/5+n/7)-(n/6+n/10+n/14+n/15+n/21+n/35)+(n/30+n/42+n/70+n/105)-(n/210);cout但我不明白这个算法。谁能解释一下这个算法。

c++ - 改进极小极大算法

目前我正在使用C++开发黑白棋/黑白棋游戏。我已经“完成”了它,只是当我将它设置为产生半具有挑战性的AI的深度时,我用于计算机播放器的Minimax算法非常慢。我的游戏的基本设置是棋盘由二维数组表示,棋盘上的每个单元格都在数组中分配一个值(xMarker,oMarker,或下划线)。这是目前为止的minimax算法:signedintComputer::simulate(Boardb,intdepth,inttempMarker){if(depth>MAX_DEPTH||b.gameOver()){intoppMarker=(marker==xMarker)?oMarker:xMark

java - 从 C++ 和 Java 到 Ada 的类构造概念

也许C++和Java的人可以帮助我定义我要解释的这个问题。我在Ada中有一个问题(你不需要知道它,我只是对这个概念感兴趣)关于如何表示实现动态标识符三个主要分支的类的构造函数:纯数值(整数、float、字符串等)列出/堆叠项目C++中的东西可能是线程(在Ada中,我们对此有更广泛的概念,与任务相关,但我们可以将一个简单的任务概念为一个线程,所以这个概念也适用)我要调用这个类Par_Class,并将任何构造的对象调用Par_Obj。因此,当一个对象Par_Obj被创建时(因此,数字值被初始化,列表/堆栈分配了其他列表/堆栈或为空并且线程执行的内存范围被保留),操作系统自动开始与我的主应用

c++ - 如何设计一个最近最近使用的缓存?

如何设计一个最近最近使用的缓存?假设您访问了一些项目。你需要设计一个数据结构来保存这些项目。每个项目都与最近访问的时间相关联。每次访问一个项目时,在数据结构中检查它。如果该项目已在缓存中,则更新其访问时间。否则,将其插入缓存。缓存大小是固定的,如果已满,则删除最早的一项。我的解决方案:使用map初始化:使用f(visitTime)降序对map进行排序。O(nlgn)如果访问了某个项目,则使用O(lgn)在map中搜索它。如果已经在map中,更新时间O(1)。对map进行排序O(lgn).如果没有,就插入到map中,然后排序。O(lgn)如果map大小>固定大小,删除最后一个元素O(1)

c++ - 如何在 O(logn) 中查找 STL 中元素的等级

我想在STL集中查找元素的等级。我能够从头遍历到那个元素并找出它的等级,但这需要O(n)。有什么方法可以在O(logn)中找到排名。 最佳答案 没有;平衡树不需要存储每个节点的后代数量,这需要更快地计算distance(s.begin(),iter)forstd::sets和迭代器iter(我猜你是这个意思)。因此,除非通过一项一项地计算,否则信息根本不存在。如果您需要执行许多此类计算,请将set复制到已排序的随机访问序列中,例如vector或deque,但随后修改序列变得昂贵。做你所要求的事情的树数据结构可能存在于某处的免费图书馆

c++ - 具有快速连续范围检索的数据结构

想象一下数据结构,它操纵一些连续的容器,并允许快速检索该数组中包含数据(可能还有自由范围)的连续索引范围。我们称这个范围为“block”。每个block都知道它的头部和尾部索引:structBlock{size_tbegin;size_tend;}当我们操作数组时,我们的数据结构更新block:arrayviewblocks[begin,end]--------------------------------------------------------------0123456789[0,9]pop2block1splitted01_3456789[0,1][3,9]pop7,8b

c++ - 连续创建一个0到1之间的随机数

我正在尝试用C++为股票价格变动建模。我需要创建一个介于0到1之间的随机数。但似乎随机数生成器的值一直在增加,并不是真正随机的。代码如下所示:#include#include#include#includeusingnamespacestd;intmain(){doublestockPrice=25;intstart=0,end=0;start=clock();srand(time(NULL));cout18){if(stockPrice==20){doubleprobability=(rand()/(double)RAND_MAX);if(probability不确定如何解决这个问题

c++ - C++ 中优先级队列的时间复杂度

创建堆需要O(n)时间,而插入堆(或优先级队列)需要O(log(n))时间。取n个输入并将它们插入优先级队列,操作的时间复杂度是多少?O(n)或O(n*log(n))。此外,如果清空整个堆(即n次删除),同样的结果也会成立,对吧? 最佳答案 如果您有一个大小为n的数组,并且您想要一次从所有项目构建一个堆,Floyd的算法可以用O(n)的复杂度来完成。参见Buildingaheap.这对应于std::priority_queueconstructors接受容器参数。如果您有一个空的优先级队列,您希望向其中添加n个项目,一次一个,那么复

c++ - 涉及STL排序算法的令人困惑的SegFault

我正在尝试使用STL重新创建编程明珠第15栏中的程序。我正在尝试使用字符串和索引vector创建后缀数组。我将我读取的单词列表记录在一个名为input的字符串中,该字符串充当我在程序开头从stdin读取的以''分隔的单词列表。在我到达代码的排序部分之前,一切都按预期工作。我想使用STL的排序算法,但我对我似乎正在创建的段错误感到完全困惑。我有:vectorwords;和全局变量stringinput;我定义了我的自定义比较函数:boolwordncompare(unsignedintf,unsignedints){intn=2;while(((f当我运行代码时:sort(words.b

c++ - 处理大规模数据集

从在线讨论组和博客中,我看到很多面试问题都与处理大规模数据集有关。我想知道是否有系统的方法来分析这类问题?或者更具体地说,是否有任何数据结构或算法可以用来处理这个问题?非常感谢任何建议。 最佳答案 “大规模”数据集分为我见过的几个类别,每个类别都提出了不同的挑战供您思考。数据太大,无法放入内存。这里,一些关键技术是:缓存经常使用的数据以获得更好的性能一次处理一个文件中的数据block,而不是尝试一次将整个文件读入内存(如果您不是按顺序处理文件,这可能特别具有挑战性!)将数据分布到多台机器的内存中。由于文件系统或硬件架构限制,数据太大