我需要Shannon-Fano算法在C# 有没有任何机构可以帮助我?我需要香农Fano算法在C#
2
A
回答
0
这是我在http://cppgm.blogspot.com/2008/01/shano-fano-code.html找到的一个。
我认为它不应该花太多努力将其移植到C#。
#include< stdio.h>
#include< conio.h>
#include< string.h>
struct node
{
char sym[10];
float pro;
int arr[20];
int top;
}s[20];
typedef struct node node;
void prints(int l,int h,node s[])
{
int i;
for(i=l;i< =h;i++)
{
printf("\n%s\t%f",s[i].sym,s[i].pro);
}
}
void shannon(int l,int h,node s[])
{
float pack1=0,pack2=0,diff1=0,diff2=0;
int i,d,k,j;
if((l+1)==h || l==h || l>h)
{
if(l==h || l>h)
return;
s[h].arr[++(s[h].top)]=0;
s[l].arr[++(s[l].top)]=1;
return;
}
else
{
for(i=l;i< =h-1;i++)
pack1=pack1+s[i].pro;
pack2=pack2+s[h].pro;
diff1=pack1-pack2;
if(diff1< 0)
diff1=diff1*-1;
j=2;
while(j!=h-l+1)
{
k=h-j;
pack1=pack2=0;
for(i=l;i< =k;i++)
pack1=pack1+s[i].pro;
for(i=h;i>k;i--)
pack2=pack2+s[i].pro;
diff2=pack1-pack2;
if(diff2< 0)
diff2=diff2*-1;
if(diff2>=diff1)
break;
diff1=diff2;
j++;
}
k++;
for(i=l;i< =k;i++)
s[i].arr[++(s[i].top)]=1;
for(i=k+1;i< =h;i++)
s[i].arr[++(s[i].top)]=0;
shannon(l,k,s);
shannon(k+1,h,s);
}
}
void main()
{
int n,i,j;
float x,total=0;
char ch[10];
node temp;
clrscr();
printf("Enter How Many Symbols Do You Want To Enter\t: ");
scanf("%d",&n);
for(i=0;i< n;i++)
{
printf("Enter symbol %d ---> ",i+1);
scanf("%s",ch);
strcpy(s[i].sym,ch);
}
for(i=0;i< n;i++)
{
printf("\n\tEnter probability for %s ---> ",s[i].sym);
scanf("%f",&x);
s[i].pro=x;
total=total+s[i].pro;
if(total>1)
{
printf("\t\tThis probability is not possible.Enter new probability");
total=total-s[i].pro;
i--;
}
}
s[i].pro=1-total;
for(j=1;j< =n-1;j++)
{
for(i=0;i< n-1;i++)
{
if((s[i].pro)>(s[i+1].pro))
{
temp.pro=s[i].pro;
strcpy(temp.sym,s[i].sym);
s[i].pro=s[i+1].pro;
strcpy(s[i].sym,s[i+1].sym);
s[i+1].pro=temp.pro;
strcpy(s[i+1].sym,temp.sym);
}
}
}
for(i=0;i< n;i++)
s[i].top=-1;
shannon(0,n-1,s);
printf("---------------------------------------------------------------");
printf("\n\n\n\tSymbol\tProbability\tCode");
for(i=n-1;i>=0;i--)
{
printf("\n\t%s\t%f\t",s[i].sym,s[i].pro);
for(j=0;j< =s[i].top;j++)
printf("%d",s[i].arr[j]);
}
printf("\n---------------------------------------------------------------");
getch();
}
相关问题
- 1. 香农的Fano算法
- 2. 我需要递归算法
- 3. 蟒蛇numpy的香农熵阵列
- 4. C++ Map:需要智能算法
- 5. 我需要什么样的算法?
- 6. 我需要Objective-C语法来计算bmi
- 7. 需要建议像算法
- 8. 需要算法的帮助
- 9. 算法需要帮助
- 10. 3D旋转算法需要
- 11. 从shannon fano编码算法生成的代码的解码
- 12. 算法需要两次计算差异
- 13. 需要的算法,创建嵌套类在C#中
- 14. 需要在C#
- 15. 需要在C#
- 16. 需要在C#
- 17. Sha或Md5算法我需要在flex中加密和解密
- 18. 我需要一个分页算法帮助我的代码?
- 19. C#/ WinForms:我需要IWin32Windows吗?
- 20. 我需要“cmd/c”吗?
- 21. 需要C++静态方法
- 22. 香农通道容量和熵的实现问题
- 23. jQuery代码需要翻译成香草,所以我可以在Angular中使用
- 24. 我需要帮助同步c远程计算机上的perforce#
- 25. 从切换到的NuSOAP PHP5香皂 - 需要在JumpStart
- 26. C#LINQ,需要说明关于逻辑/算法
- 27. 需要简单的帮助来开发c#算法
- 28. 需要C++中的快速排序算法(尝试)的帮助
- 29. 计算我需要多少变量
- 30. 我需要帮忙计算“大O”
您是否试过联系香农或法诺? :-) – paxdiablo 2010-04-24 10:01:21
@paxdiablo:香农在2001年去世了,法诺还活着;) – abatishchev 2010-04-24 10:02:32
不,我没有尝试,我需要它尽快 我该如何联系他们? – 2010-04-24 10:03:08