后端技术小黑屋



后端技术小黑屋

一个使用机器学习算法的框架,在特征处理模块,往往需要对原始特征进行特征交叉。对于简单的单值特征来说,只需要将需要交叉的特征组合起来即可;但是对于多值特征之间的交叉,则需要穷举多值特征每一个值的组合。例如,如果一个包含2个值的特征和一个包含3个值的特征组合,那么将会产生出6个组合。

一般的,我们可以把这些多值特征描述为

vector<vector<Feature>>

那么给定这样的一个数据结构,如何输出所有的特征组合呢?


直观想法,这好像是直接遍历就可以解决,但是稍微细想一下,简单的N重for循环,无法解决这个问题。

在纸上画了一会儿之后,突然发现,这不就是一个输出全排列的问题吗?

把问题抽象出来之后,我先是按照手工枚举全排列的思路,写了一个非递归的循环版本,但是可读性不好。然后又实现了一个可读性更好的递归版本。


上面这个问题,只是一个引子。

我相信,程序员在大学毕业找工作的时候,一定刷过各种各样的算法题、数据结构题,什么贪心算法、动态规划、快排、二分查找,现在算法工程师们还要手推SVM、反向传播算法等等,面试时也是历尽千辛万苦;然而工作后却发现,正是应了题目那句话:面试造核弹,工作拧螺丝。


Read full article from 后端技术小黑屋


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts