算法导论第九章9.3.7----最接近中位数的k个数 - liken的专栏 - 博客频道 - CSDN.NET



算法导论第九章9.3.7----最接近中位数的k个数 - liken的专栏 - 博客频道 - CSDN.NET

Describe an O(n) algorithm that, given a set S of n distinct numbers
and a positive integer k ≤ n, determines the k numbers in S that are closest to the
median of S .


Solution: 

Note that the k numbers in S that are closest to the median are among the k smallest numbers on either side of the partition (around the median).

注意到数组中最接近中位数的k个数字是两边分区中最小的k个数。

We first use linear time selection to find the median. 

首先使用线性选择算法找到中位数。

Then we compute an array B of absolute differences between the ith element in S and the median, B[i] = |S [i] − median|.

之后计算数字B,该数组记录数组S中每个元素到中位数距离的绝对值。B[i] = |S [i] − median|.

The k elements closest to the median are the k smallest elements in B. 

最接近中位数的k个元素是B中最小的k个元素。

We use linear time selection to find the k-th smallest element in B. 

使用线性选择算法找到数组B中第k个最小元素。

The first k elements in the resulting partition of B correspond to the k numbers in S closest to the median. 

数组B经过选择算法处理后,在结果划分的前k个元素就对应数组S中距离中位数最近的k个数。

The algorithm takes O(n) time as we use linear time selection exactly two times and traverse the n numbers in S once.

使用两次线性时间选择算法找中位数和第k个数,一次遍历数组S中的n个数,该算法时间复杂度为O(n)。



1 get the median of S

2 compute the distence of S to the median, store in B

3 get the kth order statistics in B. the first k elements in partition of B is the output


Read full article from 算法导论第九章9.3.7----最接近中位数的k个数 - liken的专栏 - 博客频道 - CSDN.NET


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