For a project, I'm trying to find the longest period where a number is higher than 10.000.000.
I was looking to find two things
number of continuous periods with a number higher than 10mil (e.g. 9 in this example)
the minimum value closest to 10 million in that biggest continuous period (e.g. in this example 9 periods)
I did the first one via the following formule
=MAX(FREQUENCY(IF(A28:AA28>=$A$1;COLUMN(A28:AA28));IF(A28:AA28<$A$1;COLUMN(A8:AA28))))
=> this returned 9 as the longest continuous period with values higher than 10 million
I cannot find a way to extract the minimum value from the longest continuous period, specifically how to get the range from the longest continuous period with values higher than 10mil.
A
B
C
D
E
F
G
H
I
J
K
L
M
N
10.000.000
18.000.000
6.000.000
15.000.000
11.000.000
15.000.000
15.000.000
15.000.000
15.000.000
19.000.000
15.000.000
15.000.000
9.000.000
7.000.000
In this example I would have the find the value 11.000.000 as this is the min value from the longest continuous frequency above 10mil.
Does anyone have an idea how to solve this?
Much appreciated!
Assuming B1 contains the result from your current formula, e.g. 9, for Office 365:
=MIN(INDEX(A28:AA28,SEQUENCE(B1,,FIND(REPT(1,B1),CONCAT(N(A28:AA28>=A1))))))
#Jos Woolley's answer is perfect, but I wondered for my own satisfaction if I could get the minimum using the frequency array? The answer is 'yes', but the formula is much longer and less elegant. I believe the number of cells in the range a28:aa28 preceding the longest run can be calculated by counting the number of elements in the frequency array before the maximum and adding the sum of those elements so I ended up with this:
=LET(range,A28:AA28,
seq,SEQUENCE(1,COLUMNS(range)),
freq,FREQUENCY(IF(range>=$A$1,seq),IF(range<$A$1,seq)),
matchPos,MATCH(B1,freq,0),
start,IF(matchPos=1,1,matchPos+SUM(INDEX(freq,SEQUENCE(matchPos-1)))),
end,start+B1-1,
MIN(INDEX(range,start):INDEX(range,end)))
Related
This is the source of the problem at uva.onlinejudge.org
The problem basically says:
Given N amount of money which has to be given!! we need to find out how much minimum coins we can give and the total value of those coins such that the extra amount given is minimal using n given denominations!
For example:
1400 -> N
3 -> no of denominations
500
1000
2000
Output: 1500 2
My question is:
What are the overlapping subproblems here?
I mean:
Are there any overlapping subproblems?
Because I couldn't find any...
The overlapping sub-problems are the minimum number of coins/bills to sum to a particular number of cents.
for coin_value in coins(sorted)
for sum where num[sum] is valid
num[ sum + coin_value ] = Min( num[sum + coin_value], num[sum] + 1 )
See: Dynamic Programming Coin Change Limited Coins
The constraints to the problem are low enough you can use the accepted answer to that question. The only difference is that you calculate the minimum number of coins/bills to sum up to the target price, and then you continue going past the target price. When you are done filling in the array, start at the target price and go up until you find a valid answer.
Sort the coins/bills and start with the largest denomination and go down.
(My solution was accepted on UVa.)
I am trying to create a forecast tool that shows a smooth growth rate over a determined number of steps while adding up to a determined value. We have variables tied to certain sales values and want to illustrate different growth patterns. I am looking for a formula that would help us to determine the values of each individual step.
as an example: say we wanted to illustrate 100 units sold, starting with sales of 19 units, over 4 months with an even growth rate we would need to have individual month sales of 19, 23, 27 and 31. We can find these values with a lot of trial and error, but I am hoping that there is a formula that I could use to automatically calculate the values.
We will have a starting value (current or last month sales), a total amount of sales that we want to illustrate, and a period of time that we want to evaluate -- so all I am missing is a way to determine the change needed between individual values.
This basically is a problem in sequences and series. If the starting sales number is a, the difference in sales numbers between consecutive months is d, and the number of months is n, then the total sales is
S = n/2 * [2*a + (n-1) * d]
In your example, a=19, n=4, and S=100, with d unknown. That equation is easy to solve for d, and we get
d = 2 * (S - a * n) / (n * (n - 1))
There are other ways to write that, of course. If you substitute your example values into that expression, you get d=4, so the sales values increase by 4 each month.
For excel you can use this formula:
=IF(D1<>"",(D1-1)*($B$1-$B$2*$B$3)/SUMPRODUCT(ROW($A$1:INDEX(A:A,$B$3-1)))+$B$2,"")
I would recommend using Excel.
This is simply a Y=mX+b equation.
Assuming you want a steady growth rate over a time with x periods you can use this formula to determine the slope of your line (growth rate - designated as 'm'). As long as you have your two data points (starting sales value & ending sales value) you can find 'm' using
m = (y2-y1) / (x2-x1)
That will calculate the slope. Y2 represents your final sales goal. Y1 represents your current sales level. X2 is your number of periods in the period of performance (so how many months are you giving to achieve the goal). X1 = 0 since it represents today which is time period 0.
Once you solve for 'm' this will plug into the formula y=mX+b. Your 'b' in this scenario will always be equal to your current sales level (this represents the y intercept).
Then all you have to do to calculate the new 'Y' which represents the sales level at any period by plugging in any X value you choose. So if you are in the first month, then x=1. If you are in the second month X=2. The 'm' & 'b' stay the same.
See the Excel template below which serves as a rudimentary model. The yellow boxes can be filled in by the user and the white boxes should be left as formulas.
So I have a table that looks like this
Arrival Time Probability
0 .09
1 .17
2 .27
3 .2
4 .15
5 .12
And I want excel to randomly create one of the 6 arrival time values based on the given probabilities using RAND(). Is there any way to do this other than to have nested If loops?
here's what I came up with.
I would add a column C that calculates the cumulative brackets from 0-1 each digit would represent. If you start with zero and use formulas to calculate your brackets, you can change the probability if needed in the future. (formulas in photo below)
For example, arrival time of 0 would be between 0 and .09.
Then you can use use the rand() function in column D to generate your random number between 0 and 1 and add a lookup function in column E, or wherever you like. Screenshots of the data and formulas:
Replace your probabilities with cumulative probabilities (with a preliminary line for 0) and use VLOOKUP, exploiting the fact that VLOOKUP finds the closest match:
The following pseudocode finds the smallest number of coins needed to sum upto S using DP. Vj is the value of coin and min represents m as described in the following line.
For each coin j, Vj≤i, look at the minimum number of coins found for the i-Vjsum (we have already found it previously). Let this number be m. If m+1 is less than the minimum number of coins already found for current sum i, then we write the new result for it.
1 Set Min[i] equal to Infinity for all of i
2 Min[0]=0
3
4 For i = 1 to S
5 For j = 0 to N - 1
6 If (Vj<=i AND Min[i-Vj]+1<Min[i])
7 Then Min[i]=Min[i-Vj]+1
8
9 Output Min[S]
Can someone explain the significance of the "+1 " in line 6? Thanks
The +1 is because you need one extra coin. So for example, if you have:
Vj = 5
Min[17] = 4
And you want to know the number of coins it will take to get 22, then the answer isn't 4, but 5. It takes 4 coins to get to 17 (according to the previously calculated result Min[17]=4), and an additional one coin (of value Vj = 5) to get to 22.
EDIT
As requested, an overview explanation of the algorithm.
To start, imagine that somebody told you you had access to coins of value 5, 7 and 17, and needed to find the size of the smallest combination of coins which added to 1000. You could probably work out an approach to doing this, but it's certainly not trivial.
So now let's say in addition to the above, you're also given a list of all the values below 1000, and the smallest number of coins it takes to get those values. What would your approach be now?
Well, you only have coins of value 5, 7, and 23. So go back one step- the only options you have are a combination which adds to 995 + an extra 5-value coin, a combination which adds to 993 + an extra 7-value, or a combination up to 977 + an extra 23-value.
So let's say the list has this:
...
977: 53 coins
...
993: 50 coins
...
995: 54 coins
(Those examples were off the top of my head, I'm sure they're not right, and probably don't make sense, but assume they're correct for now).
So from there, you can see pretty easily that the lowest number of coins it will take to get 1000 is 51 coins, which you do by taking the same combination as the one in the list which got 993, then adding a single extra 7-coin.
This is, more or less, what your algorithm does- except instead of aiming just to calculate the number for 1000, it's aim would be to calculate every number up to 1000. And instead of being passed the list for lower numbers in from somewhere external, it would keep track of the values it had already calculated.
Long story short I need to make a weighted rand function in Microsoft excel
I have a ranked list of 26 people and need the rand to have a raised chance of giving the letter E to those lower (As in first second third) on the ranked list, those in the middle need a higher chance of receiving the letter s and those at the end of the list (E.g. 24, 25 and 26) to have a higher chance of getting the letter r
My table is set out in 2 columns. column A is empty while column b has the rank numbers.
Any help or guidance is much apreciated