導航:首頁 > 源碼編譯 > c語言實現視頻濃縮演算法

c語言實現視頻濃縮演算法

發布時間:2022-06-27 00:20:16

① C語言 遞歸演算法視頻

#include <stdio.h>
#include<malloc.h>
#include <stdlib.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
#define INFEASIBLE -1

#define Link 0
#define Thread 1
#define MAX_TREE_SIZE 100
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char Status;
typedef char TElemType;
typedef TElemType SqBiTree[MAX_TREE_SIZE];
SqBiTree bt;
typedef struct BiTNode{
TElemType data;
struct BiTNode * lchild, * rchild;
}BiTNode, * BiTree;
typedef BiTree SElemType;

int CreateBiTree(BiTree *T)/*根據先序序列建立二叉樹的二叉鏈表*/
{ char ch;
scanf("%c",&ch);
if(ch==' ')
{
*T=NULL;
}
else{
if(!(*T=(BiTree)malloc(sizeof(BiTNode)))) return 0;
(*T)->data=ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return 1;
}
Status PrintElement(TElemType e){
printf("%c",e);
return OK;
}

Status PreOrderTraverse(BiTree T, Status(* Visit)(TElemType e)){
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit)) return OK;
return ERROR;
}else return OK;
}
void main()
{
BiTree T;printf("請先序輸入二叉樹:\n");
CreateBiTree(&T);

printf("\n先序遞歸遍歷二叉樹:\n");
PreOrderTraverse(T,PrintElement);
}

② 演算法編程:用c語言實現

解決這類問題可以使用 回溯 演算法,代碼如下:

#include<stdio.h>
#include<stdlib.h>

#defineM6//候選數字個數
#defineN5//組合後數字位數

intcheck(intresult[],inti)
{
for(intj=0;j<N;j++)
if(result[j]==i)
return0;

return1;
}

intlist(intnumbers[],intl,intresult[],intcount)
{
if(l>=N){

//將各位數組合成一個數
intnum=0;
for(inti=0;i<N;i++){
num=num*10+numbers[result[i]];
}

//判斷這個數是否能被75整除
if(num%75==0){
printf("%d ",num);
count++;
}

returncount;
}

for(inti=0;i<M;i++){

if(!check(result,i)){
continue;
}

result[l]=i;

count=list(numbers,l+1,result,count);

result[l]=-1;
}

returncount;
}

intmain()
{
intnumbers[M]={1,2,5,7,8,9};
intresult[N]={-1,-1,-1,-1,-1};

intcount=list(numbers,0,result,0);

printf("共有%d個 ",count);

system("pause");
return0;
}

運行結果:

③ 演算法上機實驗如圖所示,用c語言實現

#include<stdio.h>

#include<stdlib.h>

struct node {

int data;//數據域

struct node *R;//左孩子

struct node *L;//右孩子

};

int a[] = {1, 2, 3, -1, -1, -1, 4, 5,7,-1,-1,-1,6,-1,-1};//二叉樹序列

int k = 0;

node* buildTree(node *tree) {//創建二叉樹

int data=a[k++];//

if (data== - 1) {//-1代表空結點

tree = NULL;

}

else {//非空結點

tree = (node*)malloc(sizeof(node));//分配內存

tree->data = data;//數據域賦值

tree->L = tree->R = NULL;//左右孩子賦空

tree->L=buildTree(tree->L);//前往左孩子

tree->R=buildTree(tree->R);//前往右孩子

}

return tree;//返回根結點地址

}

void dfs1(node *tree) {//前序遍歷

if (tree) {

printf("%d ", tree->data);

dfs1(tree->L);

dfs1(tree->R);

}

}

void dfs2(node *tree) {//中序

if (tree) {

dfs2(tree->L);

printf("%d ", tree->data);

dfs2(tree->R);

}

}

void dfs3(node *tree) {//後序

if (tree) {

dfs3(tree->L);

dfs3(tree->R);

printf("%d ", tree->data);

}

}

void level(node *tree){

//層次遍歷,類似與bfs(廣度優先搜索)

//需要一個隊列作為輔助數據結構

node* q[100];//隊列

int f=0,r=0;//頭,尾指針

q[r++]=tree;//根結點入隊

while(f!=r){

node *t=q[f++];//出隊

printf("%d ",t->data);//輸出

if(t->L!=NULL){//非空左孩子入隊

q[r++]=t->L;

}

if(t->R!=NULL){//非空右孩子入隊

q[r++]=t->R;

}

}

}

int count(node *tree){

if(tree==NULL){

return 0;

}

else{

int n,m;

n=count(tree->L);//左子樹結點個數

m=count(tree->R);//右子樹結點個數

return n+m+1;//返回左右子樹結點個數之和

}

}

int main() {

node *tree = NULL;

tree=buildTree(tree);

printf(" 前序遍歷: ");

dfs1(tree);

printf(" 中序遍歷: ");

dfs2(tree);

printf(" 後序遍歷: ");

dfs3(tree);

printf(" 層次遍歷: ");

level(tree);

printf(" 二叉樹結點個數:%d",count(tree));

return 0;

}

④ 設計演算法,並用c語言實現。

#include<stdio.h>

intchange(intamount,intindex,intconstcoins[]){
if(amount==0)return1;
if(index<=0)return0;
for(inti=amount/coins[index-1];i>=0;--i){
if(change(amount-i*coins[index-1],index-1,coins)){
if(i)
printf("%d*%d",i,coins[index-1]);
return1;
}
}
return0;
}

intmain()
{
intcoins[]={20,50};
intconstsize=sizeof(coins)/sizeof(int);
intamount;
for(inti=0;i<size;++i){
for(intj=i+1;j<size;++j){
if(coins[i]>coins[j]){
inttemporary=coins[i];
coins[i]=coins[j];
coins[j]=temporary;
}
}
}
if(coins[0]<=0){
printf("數據有誤,零錢必須大於0 ");
return-1;
}
printf("請輸入要兌換的貨幣金額:");
scanf("%d",&amount);
if(change(amount,size,coins))
printf(" 兌換成功 ");
elseprintf(" 兌換失敗 ");
return0;
}

⑤ 用C語言實現以下問題並講解大概思路和所用演算法,非常感謝!

唔,你這個問題的話,因為你這個不指定起點,所以應該是多源最長路徑問題,我參考了一下多源最短路徑的Floyd演算法如下,不知道可不可以啊:
首先是輸入
g[i][j]表示從i城市到j城市所需要的路費,

int g[M][M]={{null,2,1,null},{null,null,5,4},{null,null,null,null},{null,null,null,null}}
null表示兩個城市之間不存在路徑,看上去這個數組很浪費,因為Floyd演算法是可以針對更復雜的圖進行計算的演算法,具體有沒有更優演算法我也不知道=。=
然後讓M=你輸入的城市數量-1,這里M=4
輸入設置好以後,就可以進行循環比較了,通過三重循環的比較,最終得到D[4][4]這樣一個數組,這個數組中的D[i][j]表示從i城市到j城市所需要的最高的路費,然後再通過比較數組D中最大值,應該就可以得出結果了。

這里復制一下原理:
Floyd-Warshall演算法的原理是動態規劃。
設Di,j,k為從i到j的只以(1..k)集合中的節點為中間節點的最短路徑的長度。
若最短路徑經過點k,則Di,j,k = Di,k,k − 1 + Dk,j,k − 1;
若最短路徑不經過點k,則Di,j,k = Di,j,k − 1。
因此,Di,j,k = min(Di,k,k − 1 + Dk,j,k − 1,Di,j,k − 1)。(而我們是求最長,所以應該換成max就可以了)

void floyd(int g[M][M],int D[M][M])
{
for(int k = 0;k<M;k++)
for(int i = 0;i<M;i++)
{
for(int j = 0;j<M;j++)
{
if(k == 0)//k=0,第一輪循環時,先將基礎值賦值給D數組
{
if(g[i][j]!=null)
D[i][j] =g[i][j];
else
{
g[i][j]=-30000;//在k=0的第一輪循環中,讓沒有路徑的地方等於一個大的負數,這樣之後的比較就不需要重復的判斷非空了
D[i][j]=-30000;
}}

else//當k不等於0時,也就是第二輪循環之後,進行最長路徑的比較和計算,大的值賦值給D數組
{
D[i][j] = MAX(D[i][j],D[i][k]+D[k][j]);
}

}
}
}
最後再寫個循環,取出數組D中的最大值就可以得到最大路程瞭然後再算最大路費,如果前面的演算法沒錯的話。
我的感覺的話,Floyd-Warshall演算法比較容易實現,不需要特殊的數據結構,就是可能演算法的時間和空間復雜度比較高,不知道你怎麼看

⑥ 如何用C語言編寫一個視頻播放器

  1. 視頻播放器是一種解碼器。

    解碼器是對已編碼的數字視頻進行還原解碼操作的程序(視頻播放器)或設備。比如系統安裝了real編碼器那就能將其他格式文件轉換成rm或rmvb格式,如果安裝了real解碼器那就能播放rm或rmvb格式文件。

  2. 這已經不是簡單C語言能夠編寫出來的,它的核心是解碼編碼的演算法。

    1,如果你只是想用某些功能,不要自己編了。找一個吧。
    2,非要自己編的話,要站在巨人的肩膀上。很多種編碼都有開源的解碼器了。可以利用他們。或者利用開源的軟體,在人家基礎上開發。
    3,如果你認為你有希望改進壓縮解壓演算法,得到更好的效果,更省地方,更有效的解壓演算法。那首先要做的是了解各種編碼的壓縮解壓演算法。創造一種更好的演算法。

⑦ 如何用C語言實現視頻文件的加解密

所有文件均可以用二進制形式表示,你按8位8位的循環處理,直接處理到文件末尾,每8位加一個1,取反等等,就改變了原來視屏文件的結構,你要是用過Ultra就知道按16進制顯示的文件內容,修改這個改變文件,從而達到加密的目的。

⑧ 關於演算法編程題(C語言實現)

char *a; //字元串 改為 char a[20];//存放字元串的字元數組
int jie; //方程的解 改為 double jie;
dy = 0; 刪去 dy=0;
兩處的 for(i=1;i<=z;i++) 都改為 for(i = 0; i < z; i++)
if (a[i] == '==' ) 改為 if (a[i] == '=' )
{z=i; 改為 {dy = i;
a=0;b=0; 刪去 a=0;b=0;
fun(a,1,dy,&b,&c); 改為 fun(a, 0, dy - 1, &b, &c);
fun(a,dy,z,&b,&c); 改為 fun(a, dy + 1, z - 1, &b, &c);
jie=(d-b)/(e-c); 改為 jie=((double)(d-b))/(e-c);
printf("%c = %d",zm,jie); 改為 printf("%c = %f",zm,jie);

⑨ 用C語言或C++實現一個簡單演算法

#include<stdio.h>
int main()
{
float a;
while(scanf("%d",&a)==0)
printf("please input right content:");
}
代碼很短,希望能幫助到你 .

⑩ 用C語言編程實現下列演算法!謝謝!

NOIP(全國信息學奧林匹克聯賽)1997
普及組
二、把1,2,…
9共9個數排成下列形狀的三角形:(30%)
a
b
c
d
e
f
g
h
i
其中:a~i分別表示1,2,...9中的一個數字,並要求同時滿足下列條件:
(1)
a<f<i
(2)b<d,
g<h,
c<e;
(3)a+b+d+f=
f+g+h+i=
i+e+c+a=
P
程序要求:根據輸入的邊長之和P,輸出所有滿足上述條件的三角形的個數及其中的一
種方案。
在演算法描述中,如果隊循環變數的初值和終值精心設置,是可以體現出變數間規定的一些大小關系的,這樣做可以減少IF語句,減少運行時間。
參考代碼:
#include<iostream>
using
namespace
std;
int
main()
{
bool
z[10]={};
int
a,b,c,d,e,f,g,h,i,p,s=0,x,y;
cin>>p;
for(a=1;a<8;z[a++]=false)
{
z[a]=true;
y=p-5-a<8?p-a-5:8;
for(f=a+1;f<=y;f++)
{
z[f]=true;
x=p-f-3<9?p-f-3:9;
for(i=f+1;i<=x;i++)
{
z[i]=true;
for(b=1;b<=(p-a-f-1)/2;b++)
{
d=p-a-f-b;
if(z[b]||d>9||z[d])continue;
z[b]=z[d]=true;
for(c=1;c<=(p-i-a-1)/2;c++)
{
e=p-a-c-i;
if(z[c]||e>9||z[e])continue;
z[c]=z[e]=true;
for(g=1;g<=(p-f-i-1)/2;g++)
{
h=p-f-g-i;
if(z[g]||h>9||z[h])continue;
if(s++==0)cout<<a<<endl<<b<<c<<endl<<p-a-f-b<<p-a-c-i<<endl<<f<<g<<p-f-i-g<<i<<endl;
}
z[c]=z[e]=false;
}
z[b]=z[d]=false;
}
z[i]=0;
}
z[f]=0;
}
z[a]=0;
}
cout<<s<<endl;
return
0;
}

閱讀全文

與c語言實現視頻濃縮演算法相關的資料

熱點內容
編譯小視頻軟體 瀏覽:595
盒馬app買東西怎麼送 瀏覽:119
編譯原理國產 瀏覽:691
在線用pdf轉word 瀏覽:424
咪咕app怎麼發表文章 瀏覽:209
phpsftp上傳 瀏覽:936
php可以幹嘛 瀏覽:879
梁箍筋加密區需要滿綁扎嗎 瀏覽:330
程序員半個月工資多少 瀏覽:821
雲伺服器租賃還是私有 瀏覽:752
php七牛視頻上傳 瀏覽:14
php五星 瀏覽:311
使用api訪問外部文件夾 瀏覽:220
自來水加密閥能控制水量嗎 瀏覽:351
移動花卡定向app怎麼訂 瀏覽:429
php調用txt 瀏覽:260
西安軟體公司程序員鼓勵師 瀏覽:135
預制樁的加密區怎麼區分 瀏覽:86
ea安裝游戲選擇文件夾 瀏覽:873
linuxapache負載均衡配置 瀏覽:651