海量積分排名 簡化後的具體實現

2021-08-21 12:57:17 字數 1895 閱讀 3748

首先積分值有個最大值,積分由n變化到m 排名變化的只是在積分n到積分m的客戶排名會發生變化故此 有如下實現

使用rankandnum來表示處在該積分的排名和數值

使用rankandnums數值來儲存所有積分排名(注意:rankandnums[n]中rankandnum中的rank和num則表示積分為n的排名和處在積分為n的使用者數量)

看下面積分改變時注意自己畫圖理解,積分由n上公升到m時位於n到m(不包括m)中積分的排名(如果該位置已經有排名)都會降低一位;

其他情況也是類似

下面上**:

/** * 該類主要用於現有積分排名策略 能夠迅速感知積分排名的變化;

* 而時間複雜度又不至於過高。

* * 該演算法在計算時需要考慮變化之後,原來位置有沒有積分排名,變化後原位置是否有積分排名,

* 是否應該清楚該積分排名等操作。是不是首位,末尾等提示。

*/public class paiming

}public static void main(string args) ;

array =p.getarray(array);//排序獲得有序的陣列 使用的是堆排序,

p.init(); //給現有的積分進行排名

p.getranking(array);

p.getrecentranking(7, 0);

for (int i = 0; i < 10; i++)

//int t = p.find(array, 0, array.length - 1, 7);

}//首先進行排序 從0開始為根節點,

public void minheap(int array, int start, int end)

}public int getarray(int array)

return array;

}public void swap(int array, int i, int j)

//獲得積分排名 使用rank來儲存 並(存在分數相同的情況),因為已經有序 但注意到積分可能會相同

//這個時候取前面的陣列下表為積分排名

public void getranking(int array)

rankandnums[array[i]].rank = i + 1;

rankandnums[array[i]].num = 1;}}

//假設積分發生變動,某使用者由n積分 ,變為 m積分,m,n都為正整數;

public void getrecentranking(int n, int m)

}if (next == -1) else

} else }}

if (rankandnums[n].num == 0)

} else if (m < n)

}//對排名m另做處理

if (previous == -1) else

} else if(previous == m)else

if (rankandnums[n].num == 0)

} else

}// (遞迴查詢有沒有)

/*** 本函式主要用於查詢已在array中的元素,不存在查詢不到的情況

** @param array 目標陣列

* @param left 起始位置

* @param right 終止位置

* @param target 查詢物件

* @return 排名

*/private int find(int array, int left, int right, int target) else if (target < array[pos]) else

}return -1;

}//查詢最後乙個大於自己的數的下標即為現在排名

}

海量使用者積分排名演算法

使用者 使用者擁有積分,積分可能會在使用過程中隨時更新,設計一種演算法,在使用者登入時顯示其當前基本排名,積分為非負整數,且小於100萬。海量使用者積分排名演算法 1.利用資料庫,建立表結構為使用者id和積分的表,用sql查詢得到排名。優點是簡單,利用sql功能,無需複雜查詢邏輯,不引入額外的儲存結...

MySQL海量使用者積分排序問題

某海量使用者 使用者擁有積分,積分可能會在使用過程中隨時更新。現在要為該 設計一種演算法,在每次使用者登入時顯示其當前積分排名。使用者最大規模為2億 積分為非負整數,且小於100萬。儲存結構 首先,我們用一張使用者積分表user score來儲存使用者的積分資訊 表結構 示例資料 下面的演算法會基於...

海量積分資料實時排名演算法

積分排名在很多專案都會出現,積分排名主要滿足以下需求 當排序的資料量不大的時候,這個需求很容易滿足,但是如果資料量很大的時候比如百萬級 千萬級甚至上億的時候,或者有實時排名需求 這個時候要滿足效能 低成本等需求,在設計上就變得複雜起來了。高效做法是不對積分進行排序,僅僅是統計每個積分區間的人數,用積...