Tag: 算法

在尊重偏好的同时将人分配到建筑物?

一位朋友今天问了我一个关于转让问题的问题。 我找到了一个非常简单的解决方案,但我觉得它可以变得更简单,更快捷。 非常感谢您的帮助。 问题:假设我有N个人,我需要将它们分配到M个建筑物中,每个建筑物都可以容纳K个人。 并非所有人都愿意相互生活,所以我有一个N * N细胞矩阵和一个标志着愿意相互生活的人的1。 如果一个单元格包含1,则意味着我和J可以共存。 显然,矩阵在主对角线周围是对称的。 我的解决方案如下(伪代码): int[] Match(int[] people, int[][] pairs, int numBuildings, int buildingsSize) { int[] freePeople = findFreePeople(people); if(freePeople) = 0 { return people; } foreach(int person in freePeople) { for(int buildingIndex=0 to numBuildings) { if( CheckIfPersonFitsInBuilding(…) ) { int[] tempPeople = people.Copy(); tempPeople[person] = buildingIndex; int[] result = […]

用于在不规则多边形中找到点的算法

Imagagine我有一个如下的多边形: 我正在寻找一个C#算法,我可以在任何多边形内找到一个点(可能是中点或也是一个随机点)。 为了找到质心,我使用了以下算法: private Point3d GetPolyLineCentroid(DBObject pObject, double pImageWidth, double pImageHeight) { Point2d[] pointArray = GetPointArrayOfRoomPolygon(pObject); double centroidX = 0.0; double centroidY = 0.0; double signedArea = 0.0; double x0 = 0.0; // Current vertex X double y0 = 0.0; // Current vertex Y double x1 = 0.0; // Next vertex X double y1 = […]

如何获取没有读取文件的行数

有没有办法获得大文本文件中的行数,但没有读取文件内容或读取文件结束和计数++。 也许有一些文件属性,但根本找不到它。 因为我可能在某些情况下我应该获得总行数并将其与当前行进行比较以显示百分比,并且仅针对百分比显示首先阅读所有内容而不是读取它再次显示原始文本可能是愚蠢的在用户。 最好成绩

列出1 … n之间k个整数的所有可能组合(n选择k)

出于没有特别的原因,我决定寻找一种算法,该算法产生1 … n之间k个整数的所有可能选择,其中k整数之间的顺序无关紧要(n选择k thingy)。 从完全相同的原因,这完全没有理由,我也用C#实现了它。 我的问题是: 你在我的算法或代码中看到任何错误吗? 而且,更重要的是, 你能建议一个更好的算法吗? 请注意算法而不是代码本身。 这不是我写过的最漂亮的代码,虽然可以告诉你是否看到了错误。 编辑: Alogirthm解释 – 我们持有k指数。 这会创建k个嵌套for循环,其中循环i的索引是indices [i]。 它模拟k for for循环,其中indices [i + 1]属于嵌套在indices [i]循环中的循环。 indices [i]从索引[i-1] + 1到n-k + i + 1运行。 码: public class AllPossibleCombination { int n, k; int[] indices; List combinations = null; public AllPossibleCombination(int n_, int k_) { if (n_ <= […]

c#中的Fibonacci,Binary或Binomial堆?

是否存在任何堆数据结构实现,斐波那契,二进制或二项式? 参考:这些是用于实现优先级队列的数据结构,而不是用于分配动态内存的数据结构。 见http://en.wikipedia.org/wiki/Heap_(data_structure) 谢谢,戴夫

算法:最大计数器

我有以下问题: 你有N个计数器,最初设置为0,你有两个可能的操作: 增加(X) – 计数器X增加1, max_counter – 所有计数器都设置为任何计数器的最大值。 给出了M个整数的非空零索引数组A. 此数组表示连续操作: 如果A [K] = X,使得1≤X≤N,则操作K增加(X), 如果A [K] = N + 1,那么操作K是max_counter。 例如,给定整数N = 5和数组A,使得: A[0] = 3 A[1] = 4 A[2] = 4 A[3] = 6 A[4] = 1 A[5] = 4 A[6] = 4 每次连续操作后计数器的值将是: (0, 0, 1, 0, 0) (0, 0, 1, 1, 0) […]

如何将数组分成3个部分,每个部分的总和大致相等

我有一个排列的数组,我想将它分成3个部分,以便它们的总和彼此最接近。 例如:我有这个数组: 10,8,8,7,6,6,6,5 所以它将分为3部分,如: p1 {10,8} sum = 18 p2 {8,7,6} sum = 21 p3 {6,6,5} sum = 17

做出完整的圆形路径,最短路径运动?

我在接受采访时得到了这个问题,但我无法解决。 你有一条环形公路,有N个加油站。 你知道每个车站有多少气体。 你知道从一个站到下一个站所需的气体量。 你的车从0气开始。 问题是:创建一个算法,以了解您必须从哪个加油站开始驾驶以完成圆形路径。 它没有指定您必须访问所有站。 你只能顺时针驾驶。 我不得不在c#中做到这一点 我开始的唯一代码是GasStation实体 class GasStation int gasAtStation; int gasToMoveToNextStationNeeded; string nameOfGasStation; GasTation wheretoStart(List list) { } 我是这样做的: static void Main(string[] args) { int[] gasOnStation = {1, 2, 0, 4}; int[] gasDrivingCostTonNextStation = {1, 1,2, 1}; FindStartingPoint(gasOnStation, gasDrivingCostTonNextStation); } static void FindStartingPoint(int[] gasOnStation, int[] gasDrivingCosts) { // Assume gasOnStation.length […]

删除图像背景/场景

我在第一部分拍摄了一张图像,但后来我想要从右侧拍摄的背景中提取所有内容(没有手的那个),这样就可以提取手了。 我现在的问题是我无法提取背景。 我尝试了一种尝试扫描每个像素并查看它是否匹配的方法。 如果是,则将像素变为黑色。 但是,该计划失败了。 有没有其他方法可以解决这个问题? 后来我会使用神经网络来检测它是否是一只手。

C#查找搜索结果显示的相关文档片段

在开发搜索我正在构建的网站时,我决定采用廉价而快捷的方式使用Microsoft Sql Server的全文搜索引擎,而不是像Lucene.Net那样更强大的东西。 不过,我希望拥有的function之一是google-esque相关文档片段。 我很快发现确定“相关”片段比我意识到的更难。 我想根据找到的文本中的搜索词密度选择片段。 所以,基本上,我需要在文本中找到最密集的搜索词。 通道是一些任意数量的字符(比如200 – 但它确实无关紧要)。 我的第一个想法是在循环中使用.IndexOf()并构建一个术语距离数组(从先前找到的术语中减去找到的术语的索引),然后……什么? 将任意两个,任意三个,任意四个,任何五个顺序数组元素相加,并使用具有最小和的那个(因此,搜索项之间的最小距离)。 这看起来很混乱。 有没有一种既定的,更好的,更明显的方式来做到这一点,而不是我想出来的?