Задать вопрос
@memba

Хитрый алгоритм сортировки горячих постов?

Привет!

Я размышляю на тему нестандартного алгоритма сортировки постов в ленте. Сейчас я использую алгоритм на примере Reddit:

package main

import (
	"fmt"
	"math"
)

/**
 * Округление числа "x" точностью "precision"
 */ 
func Round(x float64, precision int) float64 {
	shift := math.Pow(10, float64(precision))
	return math.Floor((x * shift) + 0.5) / shift;	
}

/**
 * Расчет "жары" по голосам и времени публикации
 */
func Hotness(upvoices int, downvoices int, timestamp int) float64 {
	score := upvoices - downvoices
	order := math.Log10(math.Max(math.Abs(float64(score)), 1.0))
	sign := 0.0
	
	if score > 0 {
		sign = 1.0
	} else if score < 0 {
		sign = -1.0
	}
	
	damping := float64(60 * 60 * 48)
	seconds := float64(timestamp - 1433102400)
	
	return Round((order * sign) + (seconds / damping), 7)
}

func main() {
	fmt.Println("1)  0: ", Hotness(0,0, 1433416040), "time start")
	fmt.Println("2) -5: ", Hotness(0,5, 1433412440), "+1 hour")
	fmt.Println("3) +5: ", Hotness(5,0, 1433408840), "+2 hour")
	fmt.Println("4) +10:", Hotness(10,0, 1433405240), "+3 hour")
	fmt.Println("5)  0: ", Hotness(0,0, 1433401640), "+4 hour")
}


Он хорошо подходит, если ваша лента состоит только из горячих постов, скажем постов набравших определенный рейтинг.

Мне бы хотелось иметь более универсальную ленту, в которой новые посты держатся наверху и если за них никто не голосует, они потихоньку опускаются вниз, освобождая место более рейтинговым постам.

Другими словами, например, новый пост держится наверху ленты 15 минут, если он никому не интересен, то он опускается вниз и потихоньку уходит в глубину ленты.

Может у вас есть соображения на эту тему?
  • Вопрос задан
  • 363 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
begemot_sun
@begemot_sun
Программист в душе.
использовать некую функцию от времени добавления поста и от кол-во голосов для текущей оценки места поста в ленте. Например:
F(t, n) = a * n + b/(T-t)

T - текущее время.

Коэффициенты сами подберете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы