Tag: 算法

对包含时间或距离的字符串进行排序

我已经为自定义字符串实现了排序算法,该字符串表示田径事件的时间或距离数据。 以下是格式 ’10:03.00 – 十分三秒或十英尺三英寸 排序的结果是,对于场事件,最长的投掷或跳跃将是第一个元素,而对于运行事件,最快的时间将是第一个。 以下是我目前用于现场活动的代码。 我没有发布running_event_sort因为它与大于/小于交换的逻辑相同。 虽然它有效,但它看起来过于复杂,需要重构。 我愿意接受建议。 任何帮助都会很棒。 event_participants.sort!{ |a, b| Participant.field_event_sort(a, b) } class Participant def self.field_event_sort(a, b) a_parts = a.time_distance.scan(/'([\d]*):([\d]*).([\d]*)/) b_parts = b.time_distance.scan(/'([\d]*):([\d]*).([\d]*)/) if(a_parts.empty? || b_parts.empty?) 0 elsif a_parts[0][0] == b_parts[0][0] if a_parts[0][1] == b_parts[0][1] if a_parts[0][2] > b_parts[0][2] -1 elsif a_parts[0][2] b_parts[0][1] -1 else 1 end elsif a_parts[0][0] > […]

如何计算代表n美分的方法数量

我正在研究以下算法,并想知道我的实现是否正确: 给定无穷多的四分之一,硬币,镍币和硬币,编写代码来计算代表n分的方式的数量 这没有记忆: def count_ways(n) return 0 if n < 0 return 1 if n == 0 count_ways(n-25) + count_ways(n-5) + count_ways(n-10) + count_ways(n-1) end

使用Ruby作为脚本语言,使用具有4gb RAM的计算机对30gb字符串进行排序的最佳方法是什么?

嗨,我看到这是一个面试问题,并认为这是一个有趣的问题,我不确定答案。 什么是最好的方式?

分区数组

我正在努力编写一个算法来将数组转换为该数组的所有可能的排列,但它们必须是内联/连续的。 示例如下: 阵: [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’] 结果将是: [[‘a’], [‘b’, ‘c’, ‘d’, ‘e’, ‘f’]] [[‘a’, ‘b’], [‘c’, ‘d’, ‘e’, ‘f’]] [[‘a’, ‘b’], [‘c’, ‘d’], [‘e’, ‘f’]] … Array#permutations创建排列,但它们不是有序的。 任何帮助表示赞赏。

validation和规范化部分有序集

我有一对像这样的对: [[“a”, “b”], [“b”, “d”], [“a”, “c”], [“e”, “d”], [“a”, “d”], …, [“s”, “f”]] 检查给定数组是否可以表示部分排序的有效方法是什么? 也就是说,给定数组中没有“循环”,如[“a”, “b”], [“b”, “c”], [“c”, “a”] 。 如果确认数组表示偏序,我想通过去除所有可以通过自反性或传递性导出的对来对其进行标准化。 例如,在上文中,由于存在[“a”, “b”]和[“b”, “d”] ,所以该对[“a”, “d”]是多余的,应该被移除。 1到2之间的顺序无关紧要。 如果2应该在1的过程之前或之内完成,那么,这很好。 我最好在Ruby 1.9.3中使用它,但只需伪代码即可。

在Ruby中比较数组的最有效方法

下面的代码应该找到arr_1中缺少的arr_2中的arr_2 。 def compare_1 (arr_1, arr_2) output = [] temp = arr_2.each_with_object(Hash.new(0)) { |val, hsh| hsh[val] = 0 } arr_1.each do |element| if !temp.has_key? (element) output << element end end puts output end def compare_2 (arr_1, arr_2) out = [] arr_1.each do |num| if (!arr_2.include?(num)) out << num end end puts out end 根据’基准’,第一种方法更快,大概是通过使用哈希。 有没有更简洁的方法来写这些或实现这一点? […]

需要一种Ruby方法来确定矩阵“触摸”另一个元素的元素

我认为我需要一种叫做“触摸”的方法(如连续的,而不是情绪化的。)我需要识别矩阵中与单个元素或元素集相邻的元素。 至少那是我想到的解决手头问题的方式。 下面的程序中的矩阵状态代表了一些水下地形。 随着我降低水量,最终将最高点伸出并变成“岛屿”。 当“水位”为34时,元素状态[2,3]是岛的单点。 atlantis数组保存该单点的坐标。 随着我们进一步降低水位,额外的点将“高于水面”。其他连续点将成为岛屿的一部分,它们的坐标将被添加到arrays亚特兰提斯。 (例如,下一块属于亚特兰蒂斯的土地将是国家[3,4],即31。) 我对如何做到这一点的想法是识别接触/位于亚特兰蒂斯元素旁边的所有矩阵元素,找到具有最高高度的矩阵元素,然后将其添加到亚特兰提斯数组中。 寻找单个元素旁边的元素本身就是一个挑战,但我们可以编写一些代码来检查集合[i,j-1],[i,j + 1],[i-1,j-1] ,[i-1,j],[i-1,j + 1],[i + 1,j-1],[i + 1,J],[i + 1,j + 1]。 (我想我做对了。) 但是当我们添加额外的点时,确定围绕atlantis中的点的哪些点的任务变得越来越困难。 所以这是我的问题:任何人都可以想到这样做的机制吗? 使用我不知道的rubyfunction的任何一种简化算法? (包括除最基本以外的所有内容。)如果可以编写这样的方法,那么我可以编写atlantis.touching并获得一个数组,例如,包含目前与atlantis相邻的所有点的所有坐标。 至少我认为这可以做到这一点。 任何其他想法都会受到欢迎。 如果有人知道任何类型的合作网站,我可以寻找可能有兴趣与我合作的其他人,这将是伟大的。 # create State database using matrix require ‘matrix’ State=Matrix[ [3,1,4,4,6,2,8,12,8,2], [6,2,4,13,25,21,11,22,9,3,], [6,20,27,34,22,14,12,11,2,5], [6,28,17,23,31,18,11,9,18,12], [9,18,11,13,8,9,10,14,24,11], [3,9,7,16,9,12,28,24,29,21], [5,8,4,7,17,14,19,30,33,4], [7,17,23,9,5,9,22,21,12,21,], [7,14,25,22,16,10,19,15,12,11], [5,16,7,3,6,3,9,8,1,5] ] #find sate elements contiguous […]

在任意时间范围内找到最佳日/月/年间隔的算法?

如果您有时间表,请说: March 19, 2009 – July 15, 2011 是否有一种算法可以将时间框架分解为: March 19, 2009 – March 31, 2009 # complete days April 1, 2009 – December 31, 2009 # complete months January 1, 2010 – December 31, 2010 # complete years January 1, 2011 – June 30, 2011 # complete months July 1, 2011 – July 15, […]

如何使用回溯算法制作数独求解器又回来了?

本周末,我根据回溯算法研究了Sudoku Solver( Ruby测验 )。 数独加载在81个整数(9×9网格)的数组sudoku_arr ,其中0是空点。 valid? 检查sudoku_arr可以是有效数独的方法。 官方的回溯算法是这样的:尝试下一个空白点的值,检查它是否是有效的数独,如果不是将值增加1(最多9),如果有效继续并在下一个点上尝试第一个值,如果没有增加值前一个0。 因此我们必须跟踪前一个数组,这就是我出错的地方,我不确定它是否可以解决。 我的代码中无法正常工作的部分是SudokuSolver类中的SudokuSolver 。 这是代码: require ‘pp’ sudoku_str = ” +——-+——-+——-+ | _ 6 _ | 1 _ 4 | _ 5 _ | | _ _ 8 | 3 _ 5 | 6 _ _ | | 2 _ _ | _ _ _ | _ […]

如何优雅地计算ruby中单词的anagram签名?

出于这个问题,我正在寻找一种优雅(ruby)的方式来计算这个答案中建议的单词签名。 建议的想法是对单词中的字母进行排序,并运行长度编码重复的字母。 因此,例如“mississippi”首先变成“iiiimppssss”,然后可以通过编码为“4impp4s”进一步缩短。 我对ruby相对较新,虽然我可以一起破解,但我确信这对于有ruby经验的人来说是一个单线。 我有兴趣看到人们的方法,并提高我的ruby知识。 编辑:澄清一下,计算签名的性能对我的应用程序来说并不重要。 我正在寻找计算签名所以我可以将它与每个单词存储在一个大的单词数据库(450K单词)中,然后查询具有相同签名的单词(即给定单词的所有字谜,即实际英语单词) )。 因此关注空间。 “优雅”部分只是为了满足我的好奇心。